我希望能够在docker-compose中使用env变量。Yml,在docker-compose up时传入的值。这就是例子。

今天我使用的是基本的docker run命令,该命令包含在我自己的脚本中。 有没有一种方法来实现它与撰写,没有任何这样的bash包装?

proxy:
  hostname: $hostname
  volumes:
    - /mnt/data/logs/$hostname:/logs
    - /mnt/data/$hostname:/data

当前回答

你不能……然而。但这是另一种选择,像码头作曲家一样思考。yml发电机:

https://gist.github.com/Vad1mo/9ab63f28239515d4dafd

基本上是一个替换变量的shell脚本。你也可以使用Grunt任务在CI进程结束时构建docker合成文件。

其他回答

你不能……然而。但这是另一种选择,像码头作曲家一样思考。yml发电机:

https://gist.github.com/Vad1mo/9ab63f28239515d4dafd

基本上是一个替换变量的shell脚本。你也可以使用Grunt任务在CI进程结束时构建docker合成文件。

我有一个简单的bash脚本,我为此创建,这只是意味着在使用之前在你的文件上运行它: https://github.com/antonosmond/subber

基本上只要创建你的合成文件使用双花括号表示环境变量,例如:

app:
    build: "{{APP_PATH}}"
ports:
    - "{{APP_PORT_MAP}}"

双花括号中的任何内容都将被同名的环境变量替换,因此如果我设置了以下环境变量:

APP_PATH=~/my_app/build
APP_PORT_MAP=5000:5000

运行subber docker-compose。Yml生成的文件看起来像这样:

app:
    build: "~/my_app/build"
ports:
    - "5000:5000"

docker-compose现在似乎对文件中的默认环境变量提供了本地支持。

你所需要做的就是在一个名为.env的文件中声明你的变量,它们将在docker-compose.yml中可用。

例如,对于包含以下内容的.env文件:

MY_SECRET_KEY=SOME_SECRET
IMAGE_NAME=docker_image

你可以在docker-compose中访问你的变量。Yml或将它们转发到容器中:

my-service:
  image: ${IMAGE_NAME}
  environment:
    MY_SECRET_KEY: ${MY_SECRET_KEY}

就像这样简单:

使用文档中提到的命令行:

docker-compose --env-file ./config/.env.dev config 

或者使用.env文件,我认为这是最简单的方法:

 web:
  env_file:
    - web-variables.env

带样本的文件

据我所知,这还在进行中。他们想这么做,但还没有发布。参见1377 (@Andy提到的“新”495)。

我最终实现了@Thomas提出的“生成。yml作为CI的一部分”方法。