容器怎么联网
很多人刚开始用 Docker 的时候都会遇到一个问题:我跑了一个容器,但它好像上不了网,ping 不通外网,也访问不了其他服务。其实这是网络配置的问题,容器不是不能联网,而是要看你怎么“接线”。
你可以把容器想象成一台刚装好系统的虚拟机,系统是干净的,网络也得自己配。Docker 其实已经帮我们做了不少默认工作,比如自动分配 IP、设置 NAT 规则,让容器能通过宿主机上网。
默认桥接网络就够用了
Docker 安装后会自动创建一个叫 docker0 的虚拟网桥。你每次运行容器不加参数时,它就自动连到这个桥上。比如:
docker run -d --name mynginx nginx这时候容器会从 Docker 的默认子网(通常是 172.17.0.0/16)里分一个 IP,通过宿主机的网络接口做地址转换(SNAT),就能访问外网了。你可以进容器里试试:
docker exec -it mynginx ping 8.8.8.8如果能通,说明出站联网没问题。
让外部访问容器服务
光容器能上网还不够,很多时候我们希望别人能访问容器里的服务,比如 Web 应用。这就得靠端口映射。
启动容器时加上 -p 参数,把容器端口“映射”到宿主机:
docker run -d -p 8080:80 --name webserver nginx这样访问宿主机的 8080 端口,流量就会被转发到容器的 80 端口。相当于在路由器上做了一条端口转发规则,家里的设备对外提供服务也是这么干的。
自定义网络更灵活
多个容器之间要互相通信,比如前端连后端、应用连数据库,用默认桥接也能通,但名字解析不方便。这时候可以创建自定义桥接网络:
docker network create mynet
docker run -d --network mynet --name backend myapp:latest
docker run -d --network mynet --name frontend -p 80:80 nginx在同一个自定义网络里的容器,可以直接用容器名当主机名来通信。比如在 frontend 里执行 ping backend 就能通,不用记 IP 地址。
检查网络问题的小技巧
如果容器上不了网,先别急着重装。几个常用命令帮你定位问题:
查看容器 IP 和网络配置:
docker inspect mycontainer | grep IPAddress看容器的路由表:
docker exec mycontainer ip route测试 DNS 是否正常:
docker exec mycontainer nslookup google.com有时候问题出在 DNS 配置上,可以在 daemon.json 里指定 DNS 服务器:
{
"dns": ["8.8.8.8", "114.114.114.114"]
}改完重启 Docker 服务即可。
容器联网其实没那么玄乎,理解了它背后的网络模型,就跟配置家用路由器一样,该开的口子打开,该连的线接好,自然就能通。”,"seo_title":"容器怎么联网 - Docker网络配置详解 | 数智应用帮","seo_description":"想让Docker容器正常上网和被访问?这篇文章手把手教你配置容器网络,包括端口映射、自定义网络和常见问题排查方法。","keywords":"容器怎么联网, docker网络配置, 容器端口映射, docker自定义网络, 容器无法上网"}