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

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

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

当前回答

当为卷使用环境变量时,您需要:

在包含docker-compose的文件夹中创建.env文件。yaml文件 在.env文件中声明变量: 主机名= your_hostname 在docker-compose中将$hostname修改为${hostname}。yaml文件 代理: 主机名:${主机名} 卷: - / mnt /数据/ logs / ${主机名}:/日志 - / mnt /数据/ ${主机名}:/数据

当然,你可以在每次构建时动态地这样做,比如:

echo "HOSTNAME=your_hostname" > .env && sudo docker-compose up

其他回答

env SOME_VAR="I am some var" OTHER_VAR="I am other var" docker stack deploy -c docker-compose.yml

使用3.6版本:

version: "3.6"
services:
  one:
    image: "nginx:alpine"
    environment:
      foo: "bar"
      SOME_VAR:
      baz: "${OTHER_VAR}"
    labels:
      some-label: "$SOME_VAR"
  two:
    image: "nginx:alpine"
    environment:
      hello: "world"
      world: "${SOME_VAR}"
    labels:
      some-label: "$OTHER_VAR"

我从这个链接得到的 https://github.com/docker/cli/issues/939

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

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

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

最好的方法是在docker-compose之外指定环境变量。yml文件。您可以使用env_file设置,并在同一行中定义您的环境文件。然后再次进行docker-compose,应该使用新的环境变量重新创建容器。

这是我的docker-compose。Yml看起来像:

services:
  web:
    env_file: variables.env

注意: docker-compose期望env文件中的每一行都是VAR=VAL格式。避免在.env文件中使用export。此外,.env文件应该放在执行docker-compose命令的文件夹中。

要添加一个env变量,你可以定义一个env_file(让我们称之为var.env):

ENV_A=A
ENV_B=B

并将其添加到docker组合清单服务。此外,您可以直接使用environment定义env变量。

例如在docker-compose.yaml中:

version: '3.8'
services:
  myservice:
    build:
      context: .
      dockerfile: ./docker/Dockerfile.myservice
    image: myself/myservice
    env_file:
     - ./var.env
    environment:
     - VAR_C=C
     - VAR_D=D
    volumes:
     - $HOME/myfolder:/myfolder
    ports:
     - "5000:5000"

更多最新信息请点击这里:https://docs.docker.com/compose/environment-variables/

我有一个简单的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"