Глядя на образ 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
.