Переменная окружения не собирается в контейнер из docker-compose - PullRequest
3 голосов
/ 06 июня 2019

Я пытался передать ENV_VAR в контейнер, но он не работал.

version: '3.7'

services:

    ubuntu:
        image: ubuntu:latest
        environment:
            - ENV_VAR=teste
        command: "echo ${ENV_VAR}"

Проблема была решена с использованием $$ вместо $:

version: '3.7'

services:

    ubuntu:
        image: ubuntu:latest
        environment:
            - ENV_VAR=teste
        command: '/bin/sh -c "echo $$ENV_VAR"'

Но я не понимаю, почему мне пришлось звонить sh, и я не верю, что работающее приложение внутри моего изображения сможет прочитать это значение.

1 Ответ

2 голосов
/ 06 июня 2019

Наличие переменной в вашем контейнере во время выполнения и наличие этой переменной в время запуска в вашем docker-compose.yml - это разные вещи.Compose не может заменить переменные где-то в файле конфигурации переменными из раздела environment файла - что вы пытаетесь сделать в части command, но вам придется использовать .env файл длясделайте эту работу.

Или, как вы это сделали, используйте синтаксис $$, чтобы Compose не вычислял переменную , но позволял ей вызывать Shell в контейнере.

Переменные в части environment доступны контейнеру.Вы можете проверить это на следующем минимальном примере:

  • docker-compose.yml
version: "3.7"

services:
  foo:
    image: ubuntu
    container_name: ubuntu
    environment:
      - foo=bar
    command: sleep 3
nico@tuxedo:~/StackOverflow$ docker-compose up -d && docker exec ubuntu /bin/sh -c "env | grep foo"
Starting ubuntu ... done
foo=bar

Таким образом, ваше приложение внутри контейнера не должно иметь проблем с получениемэта переменная.

Почему именно command: echo $$foo не работает, я не совсем уверен.Я считаю, что если вы используете echo в качестве ENTRYPOINT (поскольку в Dockerfile нет других ENTRYPOINT определенных ), то при запуске контейнера Shell не будет, поскольку вы перезаписываете значение по умолчанию/bin/bash.echo само по себе, похоже, не может читать переменные из среды, когда нет Shell, «обернутого вокруг него».Хотя переменные явно присутствуют (проверьте это с помощью commmand: env и docker-compose up), echo не знает, как их получить.

Если у кого-то есть хорошее объяснение этому, я оченьрад прочитать это.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...