docker stack rm 后跟 deploy 失败并在连续构建上运行

标签 docker docker-compose docker-swarm docker-swarm-mode docker-stack

Jenkins 构建部分中的 Bash 脚本

#!/bin/sh

docker build -t smstake:latest .

#Push to the private  repository applying the proper tags for the image
docker tag smstake:latest reg01.dev.01cloud.com:5000/smstake:1.0.1
docker push reg01.dev.01cloud.com:5000/smstake:1.0.1

docker stack rm smstake
docker stack deploy -c docker-compose.yml smstake
  • 在这里,我正在创建一个 docker 镜像
  • 添加适当的标签以推送到私有(private)存储库
  • 如果堆栈存在,则删除堆栈而不是再次部署它。

  • 问题是它在第一次构建中失败,并在下面发布了一些网络问题。如果再次构建,它将在另一个构建上成功运行。我该如何解决这个问题。

    我得到的错误:
    Removing service smstake_app
    Removing service smstake_db
    Removing service smstake_phpmyadmin
    Removing network smstake_smstake
    Creating service smstake_app
    failed to create service smstake_app: Error response from daemon: network smstake_smstake not found
    Build step 'Execute shell' marked build as failure
    Finished: FAILURE
    

    As we can see its removing the service and during the service creation its throwing network not found issues.



    这是我的 docker-compose.yml
    version: '3.4'
    
    networks:
      smstake: 
        ipam:
          config:
            - subnet: 10.0.10.0/24
    
    
    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:
    
            image: smstake:latest
            ports:
              - 8000:80
            networks:
              - smstake
    
            depends_on:
              - db
            deploy:
              mode: replicated
              replicas: 1
              placement:
                constraints:
                  - node.role == manager
    
        phpmyadmin:
            image: phpmyadmin/phpmyadmin
            networks:
              - smstake
            depends_on:
              - db
            environment:
              PMA_HOST: db
              PMA_PORT: 3306
              MYSQL_USER: *****
              MYSQL_PASSWORD: *****
            ports:
              - '8082:80'
            deploy:
              mode: replicated
              replicas: 1
    
    volumes:
        mysql_data:
    

    最佳答案

    问题是 docker stack rm smstake 中没有立即删除网络。但在此命令启动后 docker stack deploy -c docker-compose.yml smstake .

    您可以等待网络真正被删除,然后再次部署堆栈,如下所示:

    docker stack rm smstake
    while [ $(docker network ls | grep smstake_smstake |  wc -c) -ne 0 ] ; do sleep 1 ; done
    docker stack deploy -c docker-compose.yml smstake
    
    while只要网络 smstake_smstake 正在执行还存在。

    关于docker stack rm 后跟 deploy 失败并在连续构建上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49550067/

    相关文章:

    docker - 取消Kubernetes上的操作?

    docker - Docker Compose无法找到构建路径

    docker - Docker Swarm创建真实集群:已注册和已删除

    docker - 部署堆栈后将服务添加到堆栈

    docker - 通过VPN的Docker Swarm节点

    Selenium 测试在本地有效,但在 Gitlab CI 中无效

    docker - 如何为 TFS 上的 dockerized F# Expecto 测试配置 CI

    docker - 无法运行容器的启动脚本

    docker - 配置Neo4j并将数据保存在Docker容器中

    node.js - 在 Docker 容器中安装新的 Node 依赖项