Reputation: 1379
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
Upvotes: 57
Views: 146617
Reputation: 323
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
Upvotes: 2
Reputation: 3141
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.
Upvotes: 0
Reputation: 667
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.
# 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
Upvotes: 3
Reputation: 11
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
Upvotes: 1
Reputation: 474
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):
host
(or whatever you want to set it to)Upvotes: 8
Reputation: 62466
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.
Upvotes: 60