Docker

[Docker] overlay network 에 물려있는 좀비 컨테이너 제거하기

눈가락 2019. 5. 13. 23:54

Docker 버그 중에 하나로, 직접 만든 Overlay network 를 지우고 싶은데 자꾸 어떤 컨테이너가 이 네트워크에 물려있어서

 

지울 수 없다고 뜨는 경우가 있다.

 

확인해보면 해당 컨테이너는 존재하지 않는데도 불구하고!

 

아래처럼 해결하면 된다.

 

To remove the orphaned task that is preventing the Docker network from being removed, use the following steps:

  1. Confirm there is no attachable containers on the network. 네트워크에 물려있는 다른 컨테이너들이 없는지 확인

  2. Pull down the tasknuke tool: 아래 이미지를 받는다

    docker pull dperny/tasknuke
  3. Using the tasknuke tool, remove the orphaned task: 좀비 taskid 를 맨 뒤에 붙인 아래 명령어를 실행한다.

    docker run -v /var/run/docker/swarm/control.sock:/var/run/swarmd.sock dperny/tasknuke <taskid>

 

나의 좀비 task id는 3kmx4njzkz5ilko8d0jbon0x9 였다(아래 로그 참고)

 

그래서 

 

docker run -v /var/run/docker/swarm/control.sock:/var/run/swarmd.sock dperny/tasknuke 3kmx4njzkz5ilko8d0jbon0x9

 

이런 식으로 명령어를 넣었다.

 

그 뒤에 network 를 지우면 잘 지워진다.

 

docker network rm cw-net

 

 

 

 

 

 

 

아래는 해당 현상을 보여주는 로그들.

leecw@bd-1:~$ sudo docker network rm cw-net

[sudo] password for leecw: 

Error response from daemon: rpc error: code = FailedPrecondition desc = network it8vnxvi8x1w77lslxri73u7t is in use by task 3kmx4njzkz5ilko8d0jbon0x9

지울 수 없다. 왜냐면 태스크 3kmx4njzkz5ilko8d0jbon0x9가 이 네트워크를 사용하고 있어서.

 

 

leecw@bd-1:~$ sudo docker network inspect cw-net

[

    {

        "Name": "cw-net",

        "Id": "it8vnxvi8x1w77lslxri73u7t",

        "Created": "2019-03-29T04:02:23.281406493Z",

        "Scope": "swarm",

        "Driver": "overlay",

        "EnableIPv6": false,

        "IPAM": {

            "Driver": "default",

            "Options": null,

            "Config": [

                {

                    "Subnet": "10.10.0.0/16",

                    "Gateway": "10.10.0.1"

                }

            ]

        },

        "Internal": false,

        "Attachable": true,

        "Ingress": false,

        "ConfigFrom": {

            "Network": ""

        },

        "ConfigOnly": false,

        "Containers": null,

        "Options": {

            "com.docker.network.driver.overlay.vxlanid_list": "4107"

        },

        "Labels": null

    }

]

근데 inspect를 보면 이 네트워크에 물려있는 게 없다.

 

 

leecw@bd-1:~$ sudo docker inspect 3kmx4njzkz5ilko8d0jbon0x9

[

    {

        "ID": "3kmx4njzkz5ilko8d0jbon0x9",

        "Version": {

            "Index": 3624

        },

        "CreatedAt": "2019-04-03T08:56:53.772469567Z",

        "UpdatedAt": "2019-04-03T09:29:48.545563387Z",

        "Labels": {}, 

.....

재밌게도 해당 컨테이너를 inspect 해보면 정보가 나오긴 한다.

 

 

leecw@bd-1:~$ sudo docker stop 3kmx4njzkz5ilko8d0jbon0x9 ; sudo docker rm 3kmx4njzkz5ilko8d0jbon0x9

Error response from daemon: No such container: 3kmx4njzkz5ilko8d0jbon0x9

Error: No such container: 3kmx4njzkz5ilko8d0jbon0x9

그렇다고 제거하려고 하면 또 없는 컨테이너라고 한다.

 

 

 

 

 

 

참고 https://success.docker.com/article/force-remove-task-from-network