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

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

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

当前回答

我最终在我的deploy.sh脚本中使用“sed”来完成这一点,尽管我的要求略有不同,因为Docker - Compose是由Terrafom调用的:通过Azure应用程序服务的Terraform脚本将变量传递给Docker Compose

eval "sed -i 's/MY_VERSION/$VERSION/' ../docker-compose.yaml"

cat ../docker-compose.yaml

terraform init 
terraform apply -auto-approve \
    -var "app_version=$VERSION" \
    -var "client_id=$ARM_CLIENT_ID" \
    -var "client_secret=$ARM_CLIENT_SECRET" \
    -var "tenant_id=$ARM_TENANT_ID" \
    -var "subscription_id=$ARM_SUBSCRIPTION_ID"

eval "sed -i 's/$VERSION/MY_VERSION/' ../docker-compose.yaml"

其他回答

我最终在我的deploy.sh脚本中使用“sed”来完成这一点,尽管我的要求略有不同,因为Docker - Compose是由Terrafom调用的:通过Azure应用程序服务的Terraform脚本将变量传递给Docker Compose

eval "sed -i 's/MY_VERSION/$VERSION/' ../docker-compose.yaml"

cat ../docker-compose.yaml

terraform init 
terraform apply -auto-approve \
    -var "app_version=$VERSION" \
    -var "client_id=$ARM_CLIENT_ID" \
    -var "client_secret=$ARM_CLIENT_SECRET" \
    -var "tenant_id=$ARM_TENANT_ID" \
    -var "subscription_id=$ARM_SUBSCRIPTION_ID"

eval "sed -i 's/$VERSION/MY_VERSION/' ../docker-compose.yaml"

以下代码适用于docker-compose 3.x 在容器内设置环境变量

方法- 1直接法

web:
  environment:
    - DEBUG=1
      POSTGRES_PASSWORD: 'postgres'
      POSTGRES_USER: 'postgres'

方法- 2“。env”文件

在docker-compose.yml文件所在的位置创建一个.env文件

$ cat .env
TAG=v1.5
POSTGRES_PASSWORD: 'postgres'

你的合成文件会是这样的

$ cat docker-compose.yml
version: '3'
services:
  web:
    image: "webapp:${TAG}"
    postgres_password: "${POSTGRES_PASSWORD}"

从1.25.4开始,docker-compose支持——env-file选项,允许你指定一个包含变量的文件。

你的简历应该是这样的:

hostname=my-host-name

和命令:

docker-compose --env-file /path/to/my-env-file config

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

在包含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变量,你可以定义一个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/