如何动态更改docker-compose图像字段

Tar*_*ung 5 jenkins docker docker-compose docker-swarm docker-stack

我有一个像下面这样的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
Run Code Online (Sandbox Code Playgroud)

我正在使用它在以群集模式运行的节点中部署服务。

每次构建映像时,映像名称可能会根据用户传递的用作映像标签的分支名称或标记名而有所不同。我正在从詹金斯那里运行它。例如

如何将图像名称动态添加到服务的图像参数。由于docker stack不支持构建。我什至不能使用它。我无法找出正确的方法。

我正在尝试与 docker stack deploy -c docker-compose.yml stackname

我的确切要求是:

  1. 在詹金斯(Jenkins)从事建筑工作,为我们建立形象。
  2. 如果标签或分支名称更改,则图像名称会有所不同或更改
  3. 我们有一个构建作业,可以使用新创建的映像再次部署作业。

为新的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:
Run Code Online (Sandbox Code Playgroud)

为什么没有从configuration.env文件中读取文件,我确认在那里设置了该键的正确值。错误信息

创建服务smstake_app未能创建服务smstake_app:来自守护程序的错误响应:rpc错误:代码= InvalidArgument desc = ContainerSpec:必须提供图像参考构建步骤'Execute shell'将构建标记为失败完成:失败

yam*_*enk 8

在docker-compose文件中,您可以基于环境变量进行变量替代。这记录在“ 变量替换”下

您可以使用以下命令为图像指定其他版本:

image: smstake:${SMSTAKE_VERSION}
Run Code Online (Sandbox Code Playgroud)

在部署的jenkins作业中,您只需设置此环境变量并运行docker stack命令:

SMSTAKE_VERSION=v1.2.0 docker stack deploy -c docker-compose.yml stackname
Run Code Online (Sandbox Code Playgroud)