容器启动后无法动态修改--network参数,但可通过docker network connect/disconnect命令在运行时连接或断开网络实现热切换;host、none等模式则必须重启容器。
容器启动后无法通过 docker run 或修改 --network 参数来“动态切换”网络地址,因为网络命名空间在创建时就已固定。但你可以用原生 Docker 命令在运行时增删网络连接,实现等效的热切换效果——无需重启、不中断服务。
这是最常用、最安全的方式:让容器同时接入多个网络,或临时断开再连入新网络。Docker 允许一个容器属于多个网络(包括自定义 bridge、host 等),且操作即时生效。
docker network create --subnet=192.168.100.0/24 mynet
docker network connect --ip 192.168.100.50 mynet my-container
docker network disconnect bridge my-container
docker inspect my-container | grep -A 10 "mynet" 或 docker network inspect mynet
host、none、container 这类网络模式绑定的是整个网络命名空间,不支持运行时切换。必须停掉容器后重新运行,并显式指定 --network=host 或 --network=none。
docker stop my-container && docker run -d --network=host --name my-container nginx
如果只是想调整 IP 而不换网络,可在不重启的前提下完成,前提是目标网络支持 IPAM 静态分配(如自定义 bridge)。
docker network disconnect mynet my-container && docker network connect --ip 192.168.100.55 mynet my-container
适用于调试或特殊场景,比如需要添加额外路由、调整 MTU 或绑定 secondary IP。它绕过 Docker 管理,直接操作容器网络命名空间。
docker inspect -f '{{.State.Pid}}' my-container
nsenter -t $PID -n ip addr 查看当前接口nsenter -t $PID -n ip addr add 192.168.200.10/24 dev eth0