为什么使用docker run将docker-compose“环境”变量与通过-e标志定义的环境变量区别对待?

时间:2019-10-15 12:31:53

标签: docker docker-compose

查看PostGIS Docker image,该说明指示通过以下docker run命令使用:

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

具体来说,运行此命令时,我看到使用了-e标志(即设置了环境变量POSTGRES_PASSWORD。并且我可以测试除非指定,否则我无法登录到PostgreSQL服务器)该密码。

我正在尝试使用docker-compose运行此Docker映像,但是我发现正确设置了环境变量 NOT

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数据库的密码。这等效于运行不带-e标志的Docker映像:docker run --name some-postgis -P -d mdillon/postgis

看着另一个StackOverflow问题:docker-compose environment not the same as Docker -e,然后查看了运行docker-compose时正在创建的环境变量。正在运行: docker-compose exec some-postgis sh,然后 env

我得到以下信息:

...
POSTGRES_PASSWORD=mysecretpassword
...

因此正在设置POSTGRES_PASSWORD。由docker run创建的Docker容器与通过docker-compose创建的容器对待环境变量的原因不同。

0 个答案:

没有答案