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

如何动态更改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_

我有一个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_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}