怎样把环境变量传给码头工人-组织起来

我正在运行一个集装箱。我已经把图像上传到私人 Docker 注册表了。我想写一个合成文件下载和部署的映像。但是我希望将 TAG 名称作为 docker-compose run 命令中的变量传递。如何将 KB _ DB _ TAG _ VERION 的值作为 docker-compose 命令的一部分传递?

version: '3'
services:
db:
#build: k-db
user: "1000:50"
volumes:
- /data/mysql:/var/lib/mysql
container_name: k-db
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
image:  XX:$KB_DB_TAG_VERSION
image: k-db
ports:
- "3307:3306"
137510 次浏览

您可以在执行 docker-compose up命令的目录中创建一个 .env文件(您的 docker-compose.yml文件位于该目录中) ,其内容如下:

KB_DB_TAG_VERSION=kb-1.3.20-v1.0.0

您的 docker-compose.yml文件应该如下所示(添加了 {}) :

version: '3'
services:
db:
user: "1000:50"
volumes:
- /data/mysql:/var/lib/mysql
container_name: k-db
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
image: XX:${KB_DB_TAG_VERSION}
image: k-db
ports:
- "3307:3306"

After making the above changes , check whether the changes are reflected or not using the command docker-compose config. The variable will be replaced by the variable value. Please refer to the page 给你 to understand more about variable replacement.

你有两个选择:

  1. 按照另一个 回答中的建议创建 .env file
  2. Prepend KEY=VALUE pair(s) to your docker-compose command, e.g:

    KB_DB_TAG_VERSION=kb-1.3.20-v1.0.0 docker-compose up
    

    在脚本的前面导出它也可以工作,例如:

    export KB_DB_TAG_VERSION=kb-1.3.20-v1.0.0
    docker-compose up
    

In your docker-compose.yml file add

env_file:
- .env_file

到您的 db服务,其中. env _ file 是您的. env 文件(相应地更改其名称)。

version: '3'
services:
db:
#build: k-db
user: "1000:50"
volumes:
- /data/mysql:/var/lib/mysql
container_name: k-db
env_file:
- .env_file
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
image:  XX:$KB_DB_TAG_VERSION
image: k-db
ports:
- "3307:3306"

只是为了补充其他人,特别是@JakubKukul 所概述的内容

出于安全考虑,如果用户名/密码处于版本控制之下,您可能不希望将这些易受攻击的信息保存在 docker-compose 文件中。您还可以将主机上的环境变量映射到容器内的环境变量。在这种情况下,它可能类似于以下内容:

version: '3'
services:
db:
#build: k-db
user: "1000:50"
volumes:
- /data/mysql:/var/lib/mysql
container_name: k-db
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
image:  XX:$KB_DB_TAG_VERSION
image: k-db
ports:
- "3307:3306"


MYSQL_PASSWORD将兼具:

  1. 主机上的一个环境变量(可能只是在当前 shell 会话中)
  2. 集装箱内的环境变量来自 db服务

It's possible to pass environment variables to containers on the command line without specifying the values in files. Add an environment key with the variable's name 只有 (no value or assignment operator) on the container's service definition in the docker-compose file:

db:
...
environment:
- KB_DB_TAG_VERSION

这样使用,没有赋值,意味着 docker-compose 将查找当前环境/shell 中的环境变量:

KB_DB_TAG_VERSION=mytagversion docker-compose up

档号: https://docs.docker.com/compose/environment-variables/#pass-environment-variables-to-containers