Почему docker-compose переменные окружения обрабатываются иначе, чем переменные окружения, определенные с помощью флага -e при использовании docker run? - PullRequest
2 голосов
/ 15 октября 2019

Глядя на образ PostGIS Docker , инструкции указывают на использование с помощью следующей команды docker run:

docker run --name some-postgis -e POSTGRES_PASSWORD=mysecretpassword -d -P mdillon/postgis

В частности, при выполнении этой команды я вижу, что -e используется флаг (т. е. установлена ​​переменная среды POSTGRES_PASSWORD. И я могу проверить, что я не могу войти на сервер PostgreSQL, если не укажу этот пароль.

Я пытаюсь запустить этот образ Docker, используяdocker-compose, но я обнаружил, что переменная окружения НЕ установлена ​​правильно:

version: '3.7'

volumes:
  postgres:

services:
  postgres:
    image: mdillon/postgis
    container_name: postgres
    restart: always
    environment:
      - POSTGRES_PASSWORD=mysecretpassword
    ports:
      - 5432:5432
    volumes:
      - postgres:/var/lib/postgresql/data

А затем я запускаю контейнер: docker-compose up -d --force-recreate --build. Я обнаружил, что могуполучить доступ к базе данных PostGIS БЕЗ пароля. Это эквивалентно запуску образа Docker без флага -e: docker run --name some-postgis -P -d mdillon/postgis

Просмотр другого вопроса StackOverflow: docker-создать среду, отличную от Docker -e , затем я посмотрел, какие переменные среды создаются при запуске docker-compose. Запуск: docker-compose exec some-postgis sh, а затем env

Я получаюследующее:

...
POSTGRES_PASSWORD=mysecretpassword
...

Итак, POSTGRES_PASSWORD устанавливается. По каким причинам контейнер Docker, созданный docker run, обрабатывает переменные среды иначе, чем контейнеры, созданные с помощью docker-compose.

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