如何动态更改docker compose图像字段
我有一个docker-compose.yml类似于bellow:如何动态更改docker compose图像字段,docker,jenkins,docker-compose,docker-swarm,docker-stack,Docker,Jenkins,Docker Compose,Docker Swarm,Docker Stack,我有一个docker-compose.yml类似于bellow: networks: smstake: ipam: config: - subnet: 10.0.10.0/24 services: app: image: smstake:latest ports: - 8000:80 networks: - smstake depends_
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
我使用它在swarm模式下运行的节点中部署服务
每次生成图像时,图像名称可能会因用户传递的分支名称或标记名(用作图像的标记名)而不同。我是从詹金斯家来的。例如:smstack:
如何将映像名称动态添加到服务的映像参数中。因为docker堆栈不支持生成。我甚至不能用它。
我想不出做这件事的正确方法
我正在尝试使用docker stack deploy-c docker-compose.yml stackname部署
我的确切要求是:
在詹金斯有一份为我们树立形象的建筑工作
如果标记或分支名称更改,则图像名称会有所不同或更改
我们有一个构建作业,可以使用新创建的映像再次部署作业
为新标签创建新图像的原因是,我可以回滚到以前构建的图像
一些编辑:
将映像名称添加到add-in configuration.env文件中,该文件将在deploy命令运行之前使用deploy job中的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文件中读取,我已经确认,该键的正确值设置在那里。错误消息
创建服务SMU应用程序
无法创建服务SMU应用程序:来自后台程序的错误响应:rpc错误:代码=InvalidArgument desc=容器Spec:必须提供映像引用
生成步骤“执行shell”将生成标记为失败
完成:失败在docker compose文件中,可以基于环境变量进行变量替换。这在下有记录
可以使用以下选项为图像指定不同的版本:
image: smstake:${SMSTAKE_VERSION}
在部署的jenkins作业中,您只需设置此环境变量并运行docker stack命令:
SMSTAKE_VERSION=v1.2.0 docker stack deploy -c docker-compose.yml stackname
但您可以使用版本进行回滚,即image:smstack:12345678901234567890@ConstantinGalbenu我应该从哪里得到这个版本,从docker存储库得到什么,在那里你可以看到历史是的,我完全按照你的建议来做。如何确认或以任何方式检查是否成功获取值。之后我会投票表决你的答案。谢谢这真的不管用。该值没有传递到docker-compose.yml中的image字段,因此我得到了问题<代码>无法创建服务SMU应用程序:来自后台程序的错误响应:rpc错误:代码=无效参数描述=容器规范:必须提供映像引用
。根据错误jenkins错误日志,没有在docker compose中设置图像名称。yml@TaraPrasadGurung您可以运行docker compose config
命令来验证设置的值是否正确。请参阅缺少$的图像:image:smstack:${smstack\u VERSION}