57

I'm trying to update the network of a running docker container.

Note: I didn't attach any network while running the container.

[root@stagingrbt ~]# docker network connect host cdf8d6e3013d
Error response from daemon: container sharing network namespace with another container or host cannot be connected to any other network

[root@stagingrbt ~]# docker network connect docker_gwbridge cdf8d6e3013d
error during connect: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/networks/docker_gwbridge/connect: EOF


[root@stagingrbt ~]# docker network create -d host my-host-network
Error response from daemon: only one instance of "host" network is allowed


[root@stagingrbt ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
495080cf93e3        bridge              bridge              local
cf0408d6f13f        docker_gwbridge     bridge              local
2c5461835eaf        host                host                local
87e9cohcbogh        ingress             overlay             swarm
84dbd78101e3        none                null                local
774882ac9b09        sudhirnetwork       bridge              local
3
  • 1
    Hi, can you give more details what you want to accomplish? what is the setup your trying to get? based on the error messages it sounds like docker does not support it Commented Feb 16, 2019 at 8:14
  • How to change network of running docker container? Commented Feb 16, 2019 at 10:13
  • Sorry maybe unclear question. What meant was that i don't think you're using the commands to change the networking of running container in the wrong way. It's more that you're trying to change it in way that is not supported. Commented Feb 16, 2019 at 10:24

6 Answers 6

63

When you start a container, such as:

docker run -d --name alpine1 alpine

It is by default connected to the bridge network, check it with:

docker container inspect alpine1

If you try to connect it to host network with:

docker network connect host alpine1

you obtain an error:

Error response from daemon: container cannot be disconnected from host network or connected to host network

you have to delete the container and run it again on the host network:

docker stop alpine1
docker rm alpine1
docker run -d --network host --name alpine1 alpine

This limitation is not present on bridge networks. You can start a container:

docker run -d --name alpine2 alpine

disconnect it from the bridge network and reconnect it to another bridge network.

docker network disconnect bridge alpine2
docker network create --driver bridge alpine-net
docker network connect alpine-net alpine2

Note also that according to the documentation:

The host networking driver only works on Linux hosts, and is not supported on Docker Desktop for Mac, Docker Desktop for Windows, or Docker EE for Windows Server.

Sign up to request clarification or add additional context in comments.

3 Comments

but if am attaching to bridge network, my running docker container all ports not exposing, also below error I was getting because my swarm was up after docker swarm leave command running again same command worked. [root@stagingrbt ~]# docker network connect docker_gwbridge cdf8d6e3013d error during connect: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/networks/docker_gwbridge/connect: EOF
This should be marked as answer.
I would like to highlight that "bridge" in the docker network disconnect bridge alpine2 command should be replaced by the name of the docker network that the container is currently connected to.
8

If you want to circumvent the command line and change the network of your docker container via portainer, you can do so. I'm not sure exactly which is the best way of doing this, but the steps below worked for me (changing a container that was running on the bridge network by default into the host network):

  1. In the Container list, click on the container name (emby, in my case)
  2. Stop the container
  3. Click on Duplicate/Edit
  4. Scroll down to Advanced container settings and select the Network tab
  5. Change the Network to host (or whatever you want to set it to)
  6. Click on Deploy the container right above.
  7. Confirm that you want to replace the old container (or deploy it under a new name if you want to be on the save side and keep the old one).
  8. Done! Screenshot of Advanced container settings

3 Comments

lifesaver, worked like a charm
Although valuable the OP is on a linux system so a command line answer is necessary. i.e. See answer from Ortomala Lokni. All you are doing is creating a NEW container on a different network, that doesn't answer the question of the op: "I'm trying to update the network of a running docker container.". Running container.
Works well! This did nothing to the data volume, which is what I wanted!
3

I am not sure if we can change the container network while running, however, assuming that the new docker network already exists, you can run the following commands to update your container network.

Executed on Version: 20.10.21 Community Edition
# docker stop <container-name>
# docker network disconnect <old-network-id> <container-name> 
# docker network connect <new-network-id> <container-name>
# docker start <container-name>

Note: you won't be able to switch to host network from other network

Comments

3

To change the network of a running container you First need to disconnect the container from the current network:

docker network disconnect network-name container-name

Then you can connect to another network, or create a new one and connect to that.

Create a Network:

docker network create new-network-name

The above command will create a new network and connect it to the bridge DRIVER.

Then connect the container to the new network:

docker network connect --alias set-alias network-name container-name

Comments

1
Run or connect a container to a specific network: Note first of all, the network must exist already on the host. Either specify the network at container creation/startup time (docker create or docker run) with the --net option; or attach an existing container by using the docker network connect command. For example:

docker network connect my-network my-container

1 Comment

Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
0

In case you are using swarm mode and want to connect to an external network, use this:

version: '3.6' # not 3.4

services:
  a_service:
    image: "nginx:alpine"
    command: sleep 10000
    networks:
      - outside

networks:
  outside:
    name: host
    external: true

with docker stack deploy -c filename.yml temp_stack

Also, check open ports.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.