如何更改正在运行的Docker容器的网络?

sud*_*aju 3 docker

我正在尝试更新正在运行的Docker容器的网络。

注意:运行容器时,我没有连接任何网络。

[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
Run Code Online (Sandbox Code Playgroud)

Chr*_*oph 8

如果您想绕过命令行并通过portainer更改 docker 容器的网络,您可以这样做。我不确定哪种方法最好,但以下步骤对我有用(将默认在桥接网络上运行的容器更改为主机网络):

  1. 在容器列表中,单击容器名称(在我的例子中为 emby)
  2. 停止容器
  3. 单击复制/编辑
  4. 向下滚动到高级容器设置并选择网络选项卡
  5. 将网络更改为host(或任何您想要设置的值)
  6. 单击上方的“部署容器” 。
  7. 确认您要替换旧容器(或者如果您想保存并保留旧容器,则将其部署在新名称下)。
  8. 完毕! 高级容器设置的屏幕截图


Ort*_*kni 6

启动容器时,例如:

docker run -d --name alpine1 alpine
Run Code Online (Sandbox Code Playgroud)

默认情况下,它已连接到bridge网络,请使用以下命令进行检查:

docker container inspect alpine1
Run Code Online (Sandbox Code Playgroud)

如果您尝试通过以下方式将其连接到host网络:

docker network connect host alpine1
Run Code Online (Sandbox Code Playgroud)

您得到一个错误:

来自守护程序的错误响应:容器无法从主机网络断开连接或连接到主机网络

您必须删除容器,然后在主机网络上再次运行它:

docker stop alpine1
docker rm alpine1
docker run -d --network host --name alpine1 alpine
Run Code Online (Sandbox Code Playgroud)

在网桥网络上不存在此限制。您可以启动一个容器:

docker run -d --name alpine2 alpine
Run Code Online (Sandbox Code Playgroud)

将其从网桥网络断开,然后将其重新连接到另一个网桥网络。

docker network disconnect bridge alpine2
docker network create --driver bridge alpine-net
docker network connect alpine-net alpine2
Run Code Online (Sandbox Code Playgroud)

另请注意,根据文档

主机网络驱动程序仅适用于Linux主机,Mac的Docker桌面,Windows的Docker桌面或Windows Server的Docker EE不支持该主机网络驱动程序。

  • 这应该标记为答案。 (2认同)