5

给定一个非常简单的 docker-compose文件:

version: '3'

services:
  test:
    image: busybox
    env_file:
      - my.env
    command: env

my.env以及其中引用的文件:

FOO=BAR

按预期运行docker-compose up打印(容器名称前缀默认为父目录的名称):

test_1  | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
test_1  | HOSTNAME=00dc4fa7f38a
test_1  | FOO=BAR
test_1  | HOME=/root
tmp_test_1 exited with code 0

env_file从外部覆盖变量,如FOO=SOMETHING_ELSE docker-compose up,但不会反映在容器中。输出仍将FOO=BAR包含my.env.

是否有可能以某种方式覆盖env_file从外部定义的变量,而不在文件内部更改它们?我知道如果我docker-compose.yml用该行扩展我的文件它会起作用

environment:
  - FOO

然而,这并不能真正扩展到更多的变量——人们总是必须确保env_filedocker-compose.yml是同步的以防止讨厌的错误。

4

1 回答 1

4

至少在docker-compose up. 有一个使用 ) 指定环境变量的选项docker-compose run

docker-compose run -e DEBUG=1 web python console.py

我不确定您的用例是什么,但使用覆盖文件是我在开发或测试/CI 期间完成为每个用户定义不同环境变量的最佳方式。

于 2018-08-06T18:40:24.120 回答