代码之家  ›  专栏  ›  技术社区  ›  Darksymphony

仅当docker容器和网络存在时才删除它们

  •  0
  • Darksymphony  · 技术社区  · 4 年前

    在Jenkins中,我试图删除所有正在运行的容器,并删除我的网络(称为我的网络),但前提是它们存在。

    在其中一个步骤中:

    stage('test1') {
                      steps {
                             sh 'docker network create my-net'
                             sh 'docker build -t myimage1 .'
                             sh 'docker create --name mybackend--network my-net myimage1'
                             sh 'docker start mybackend'
                            }
            }
    

    在所有阶段之前,我提出:

    stage('Remove containers and network') {
          steps {
                sh 'docker stop $(docker ps -a -q)'
                sh 'docker rm $(docker ps -a -q)'
                sh 'docker network rm my-net'
          }
        } 
    

    这应该会删除所有正在运行的容器(因为我不是只有一个容器在运行),并且 我的网 网络

    我用这个来删除所有正在运行的容器,因为我不知道如何只删除名称为的容器 mybackend ,但前提是它正在运行。

    网络也有问题,如果它没有运行,它会在这条线上失败:

     sh 'docker network rm my-net'
    

    我也试着把这个删除步骤放在我所有步骤的最后,但在这种情况下,如果脚本在某个地方失败,它就不会在最后到达删除步骤。

    所以问题是,如果我想把删除作为第一步,有没有办法:

    • 停止并删除名为的容器 mybackend 仅当它正在运行时(也删除另一个相同的方法,例如mybackend2)
    • 去除 我的网 网络,但前提是它存在

    我调查时发现:

    docker system prune
    

    这应该清理所有未使用的容器、网络和图像。但在我的情况下,网络或容器可能正在运行,所以它不是未使用的,所以我唯一想要的就是删除我的容器和网络,如果它们正在运行的话。

    0 回复  |  直到 4 年前
        1
  •  0
  •   Darksymphony    4 年前

    好的,我找到了一个解决方案,我把所有的东西都放在帖子里->始终是step,即使出现故障也会运行。

       post {
            always {
                sh 'docker stop $(docker ps -a -q)'
                sh 'docker rm $(docker ps -a -q)'
                sh 'docker network rm my-net'
            }
        }