我有一个像波纹管一样的docker-compose.yml:
networks:
smstake:
ipam:
config:
- subnet: 10.0.10.0/24
services:
app:
image: smstake:latest
ports:
- 8000:80
networks:
- smstake
depends_on:
- db
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
我正在使用它在以群集模式运行的节点中部署服务。
每次构建图像时,图像名称可能会因用户传递的分支名称或作为图像标记的标记名而有所不同。我是从詹金斯那里运来的。例如: smstake:
如何将图像名称动态添加到服务的image参数中。由于docker stack不支持构建。我甚至无法使用它。 我无法找到正确的方法。
我正在尝试使用docker stack deploy -c docker-compose.yml stackname
我的确切要求是:
为新TAG创建新图像的原因是我可以回滚到以前构建的图像。
有些编辑: 添加了要添加到configuration.env文件中的映像名称,该文件将在部署命令运行之前使用部署作业中的echo命令传递。而docker-compose将如下所示
version: '3.4'
networks:
smstake:
services:
db:
image: mysql:5.7
networks:
- smstake
ports:
- "3306"
env_file:
- configuration.env
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
deploy:
mode: replicated
replicas: 1
app:
env_file:
- configuration.env
image: ${SMSTAKE_VERSION}
ports:
- 8000:80
networks:
- smstake
depends_on:
- db
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
volumes:
mysql_data:
为什么不从configuration.env文件中读取,在我确认的位置设置了该键的正确值。错误消息
创建服务smstake_app 无法创建服务smstake_app:来自守护程序的错误响应:rpc错误:code = InvalidArgument desc = ContainerSpec:必须提供图像引用 构建步骤'执行shell'将构建标记为失败 完成:失败
答案 0 :(得分:6)
在docker-compose文件中,您可以根据环境变量设置变量。这在Variable Substitution下记录。
您可以使用以下内容为图像指定其他版本:
image: smstake:${SMSTAKE_VERSION}
在部署的jenkins作业中,您可以设置此环境变量并运行docker stack命令:
SMSTAKE_VERSION=v1.2.0 docker stack deploy -c docker-compose.yml stackname