我正在尝试运行容器。我已将映像上载到专用Docker注册表。我希望编写合成文件以下载和部署映像。但我希望将TAG名称作为docker-compose run命令的变量传递。我的合成文件如下所示。如何将KB_DB_TAG_VERSION的值作为docker-compose up命令的一部分传递?
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"
6条答案
按热度按时间w6mmgewl1#
您有两种选择:
1.按照另一个answer中的建议创建.env file。
1.在
docker-compose
命令之前添加KEY=VALUE
对,例如:也可以在脚本中提前导出它,例如:
gr8qqesn2#
您可以在执行
docker-compose up
命令的目录(以及docker-compose.yml
文件所在的目录)中创建一个包含以下内容的.env
文件:docker-compose.yml
文件应如下所示(添加了{
和}
):修改完以上内容后,使用
docker-compose config
命令检查修改是否反映出来,变量会被替换为变量值,关于变量替换的详细信息请参见此处页面。rlcwz9us3#
只是为了补充其他人,特别是@JakubKukul概述的内容
出于安全考虑,如果Docker-compose文件处于版本控制之下,您可能不希望保留易受攻击的信息,如用户名/密码。您也可以将主机上的环境变量Map到container中的环境变量。在这种情况下,可能如下所示:
其中,
MYSQL_PASSWORD
可以是:1.主机上的环境变量(可能只在当前shell会话中)
db
服务的容器内的环境变量z6psavjg4#
可以在命令行上将环境变量传递给容器,* 而无需 * 在文件中指定值。在docker-compose文件中的容器服务定义上添加一个
environment
键,其变量名为 only(无值或赋值运算符):以这种方式使用,没有赋值,意味着docker-compose将在当前环境/shell中查找环境变量:
参考:https://docs.docker.com/compose/environment-variables/#pass-environment-variables-to-containers
3lxsmp7m5#
对于Windows,不使用导出,而是用途:
am46iovg6#
在docker-compose.yml文件中添加
到
db
服务,其中.env_file是.env文件(相应地更改其名称)。