代码之家  ›  专栏  ›  技术社区  ›  Zach Smith

为什么docker compose“环境”变量的处理方式与使用docker run通过-e标志定义的环境变量不同?

  •  0
  • Zach Smith  · 技术社区  · 5 年前

    看着一个邮递员 Docker image ,说明通过以下方式指示使用 docker run

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

    具体来说,当运行此命令时,我看到 -e 使用标志(即环境变量 POSTGRES_PASSWORD 一切就绪。我可以测试我不能登录到PostgreSQL服务器,除非我指定了密码。

    我正在尝试使用 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 没有 -e 旗帜: docker run --name some-postgis -P -d mdillon/postgis

    docker-compose environment not the same as Docker -e ,然后我查看了运行时创建的环境变量 . 运行: docker-compose exec some-postgis sh ,然后 env

    我得到以下信息:

    ...
    POSTGRES_PASSWORD=mysecretpassword
    ...
    

    所以 POSTGRES_密码 正在设置。Docker容器创建的原因是什么 码头工人赛跑 将环境变量与通过创建的容器区别对待 .

    0 回复  |  直到 5 年前