【问题标题】:docker stack rm followed by deploy fails and runs on consecutive buildsdocker stack rm 后跟 deploy 失败并在连续构建上运行
【发布时间】:2018-03-29 07:13:55
【问题描述】:

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
  1. 我在这里创建一个 docker 映像
  2. 为其添加适当的标签以推送到私有存储库
  3. 如果存在堆栈,则移除堆栈而不是再次部署它。

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

我得到的错误:

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

我们可以看到它在删除服务和创建服务期间 它的投掷网络未发现问题。

这是我的 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 docker-compose docker-swarm docker-swarm-mode docker-stack


    【解决方案1】:

    问题是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
    

    只要网络 smstake_smstake 仍然存在,while 就会执行。

    【讨论】:

    • 卡在Removing service smstake_app Removing service smstake_db Removing service smstake_phpmyadmin Removing network smstake_smstake Failed to remove network v4o7gv5ayb1m0tyaokz7hmy8u: Error response from daemon: rpc error: code = FailedPrecondition desc = network v4o7gv5ayb1m0tyaokz7hmy8u is in use by task z3azhlixlxy99khaj3vxue97pFailed to remove some resources from stack: smstake 这里无法部署部分
    • @TaraPrasadGurung 您应该尝试在文件开头删除任务,然后再删除
    • 在 bash 脚本顶部添加了任何其他任务之前的内容,但看起来它不会结束。这是詹金斯构建部分pastebin.com/wNH01iVR
    • @TaraPrasadGurung 是什么?
    • 您也可以将wc 命令用作wc -l(计算行而不是字符)。
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2018-09-10
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多