#linux #bash #docker
Вопрос:
У меня есть Докерфайл
FROM ubuntu:20.04
RUN apt-get update amp;amp; apt-get install -y software-properties-common curl gnupg2 amp;amp;
curl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add - amp;amp;
apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" amp;amp;
apt-get update amp;amp; apt-get install -y
vault amp;amp;
setcap cap_ipc_lock= /usr/bin/vault
COPY run.sh ./
CMD ./run.sh
И мой run.sh файл
#!/bin/bash
VAULT_RETRIES=5
echo "Vault is starting..."
until vault status > /dev/null 2>amp;1 || [ "$VAULT_RETRIES" -eq 0 ]; do
echo "Waiting for vault to start...: $((VAULT_RETRIES--))"
sleep 1
done
echo "Authenticating to vault..."
vault login token=vault-plaintext-root-token
echo "Initializing vault..."
vault secrets enable -version=2 -path=my.secrets kv
echo "Adding entries..."
vault kv put my.secrets/dev username=test_user
vault kv put my.secrets/dev password=test_password
echo "Complete..."
Когда я запускаю докер, у меня возникают проблемы —
/bin/sh: 1: ./run.sh: не найдено
Если я заменю
CMD ./run.sh
на
ЗАПУСТИТЕ chmod x run.sh
контейнер запускается без проблем, но скрипт не работает, потому что я не вижу в терминале эхо-команд
Комментарии:
1. Замена
CMD
наRUN
не имеет никакого смысла-эти две команды делают совершенно разные вещи.CMD
означает «выполните эту команду при запуске контейнера», в то времяRUN
как означает «выполните эту команду сейчас во время создания образа».2. Что это такое
WORKDIR
? Вы пробовали указать абсолютный путь кrun.sh
in CMD?
Ответ №1:
Моя проблема была в #!/bin/bash
этом . Я переписал это дальше #!/bin bash
, и мой сценарий работает. Но у меня была вторая проблема, это exec user process caused "permission denied"
…. Эта проблема была решена — я добавил RUN chmod rx run.sh
команду в файл Dockerfile, и кодировка скрипта должна быть utf-8 СПЕЦИФИКАЦИЯ (для Windows).