Ahdee
Ahdee

Reputation: 4949

Error response from daemon: service endpoint with name

I'm getting this strange error, when I try to run a docker with a name it gives me this error.

docker: Error response from daemon: service endpoint with name qc.T8 already exists.

However, there is no container with this name.

> docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

> sudo docker info

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 3
Server Version: 1.12.3
Storage Driver: aufs
 Root Dir: /ahdee/docker/aufs
 Backing Filesystem: extfs
 Dirs: 28
 Dirperm1 Supported: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: null bridge host overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: apparmor
Kernel Version: 3.13.0-101-generic
Operating System: Ubuntu 14.04.4 LTS
OSType: linux
Architecture: x86_64
CPUs: 64
Total Memory: 480.3 GiB

Is there anyway I can flush this out?

Upvotes: 50

Views: 71104

Answers (10)

folaRin
folaRin

Reputation: 129

You could try seeing if there's any network with that container name by running:

docker network ls

If there is, copy the network id then go on to remove it by running:

docker network rm network-id

Upvotes: 1

guangyu li
guangyu li

Reputation: 1

i think restart docker deamon will solve the problem

Upvotes: 0

kklepper
kklepper

Reputation: 813

Even reboot did not help in my case. It turned out that port 80 to be assigned by the nginx container automatically was in use, even after reboot. How come?

root@IONOS_2: /root/2_proxy # netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      1378/rsync
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN      1565/systemd-resolv
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1463/nginx: master
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1742/sshd
tcp6       0      0 :::2377                 :::*                    LISTEN      24139/dockerd
tcp6       0      0 :::873                  :::*                    LISTEN      1378/rsync
tcp6       0      0 :::7946                 :::*                    LISTEN      24139/dockerd
tcp6       0      0 :::5355                 :::*                    LISTEN      1565/systemd-resolv
tcp6       0      0 :::21                   :::*                    LISTEN      1447/vsftpd
tcp6       0      0 :::22                   :::*                    LISTEN      1742/sshd
tcp6       0      0 :::5000                 :::*                    LISTEN      24139/dockerd

No idea what nginx: master means or where it came from. And indeed 1463 is the PID:

root@IONOS_2: /root/2_proxy # ps aux | grep "nginx"
root       1463  0.0  0.0  43296   908 ?        Ss   00:53   0:00 nginx: master process /usr/sbin/nginx
root       1464  0.0  0.0  74280  4568 ?        S    00:53   0:00 nginx: worker process
root      30422  0.0  0.0  12108  1060 pts/0    S+   01:23   0:00 grep --color=auto nginx

So I tried this:

root@IONOS_2: /root/2_proxy # kill 1463

root@IONOS_2: /root/2_proxy # ps aux | grep "nginx"
root      30783  0.0  0.0  12108   980 pts/0    S+   01:24   0:00 grep --color=auto nginx

And the problem was gone.

Upvotes: -1

Shalabh Negi
Shalabh Negi

Reputation: 662

docker network inspect <network name>
docker network disconnect <network name> <container id/ container name>

You can also try doing:

docker network prune
docker volume prune
docker system prune 

these commands will help clearing zombie containers, volume and network. When no command works then do

sudo service docker restart

your problem will be solved

Upvotes: 36

Gaurav
Gaurav

Reputation: 31

Restarting docker solved it for me.

Upvotes: 3

vladimir vojtisek
vladimir vojtisek

Reputation: 141

docker network rm <network name>

Worked for me

Upvotes: 6

Jaydeep Ranipa
Jaydeep Ranipa

Reputation: 439

This could be because an abrupt removal of a container may leave the network open for that endpoint (container-name).

Try stopping the container first before removing it. docker stop <container-name>. Then docker rm <container-name>.

Then docker run <same-container-name>.

Upvotes: 0

Jmons
Jmons

Reputation: 1786

TLDR: restart your docker daemon or restart your docker-machine (if you're using that e.g. on a mac).

Edit: As there are more recent posts below, they answer the question better then mine. The Network adapter is stuck on the daemon. I'm updating mine as its possibly 'on top' of the list and people might not scroll down.

  1. Restarting your docker daemon / docker service / docker-machine is the easiest answer.

  2. the better answer (via Shalabh Negi):

docker network inspect <network name>
docker network disconnect <network name> <container id/ container name>

This is also faster in real time if you can find the network as restarting the docker machine/demon/service in my experience is a slow thing. If you use that, please scroll down and click +1 on their answer.


So the problem is probably your network adapter (virtual, docker thing, not real): have a quick peek at this: https://github.com/moby/moby/issues/23302.

To prevent it happening again is a bit tricky. It seems there may be an issue with docker where a container exits with a bad status code (e.g. non-zero) that holds the network open. You can't then start a new container with that endpoint.

Upvotes: 35

lac_dev
lac_dev

Reputation: 1449

I created a script a while back, I think this should help people working with swarm. Using docker-machine this can help a bit.

https://gist.github.com/lcamilo15/7aaaebe71852444ea8f1da5c4c9c84b7

declare -a NODE_NAMES=("node_01", "node_02");
declare -a CONTAINER_NAMES=("container_a", "container_b");
declare -a NETWORK_NAMES=("network_1", "network_2");
for x in "${NODE_NAMES[@]}"; do;
    docker-machine env $x;
    eval $(docker-machine env $x)
    for CONTAINER_NAME in "${CONTAINER_NAMES[@]}"; do;
        for NETWORK_NAME in "${NETWORK_NAMES[@]}"; do;
            echo "Disconnecting $CONTAINER_NAME from $NETWORK_NAME"
            docker network disconnect -f $NETWORK_NAME $CONTAINER_NAME;
        done;
    done;
done;

Upvotes: 1

Ahdee
Ahdee

Reputation: 4949

Just in case someone else needs this. As @Jmons pointed out it was a weird networking issue. So I solved this by forcing a removal

docker network disconnect --force bridge qc.T8

A

Upvotes: 49

Related Questions