昨天被问到一个问题,服务器中的 docker 网络使用的是那种模式?
这个一般都是默认的桥接模式 (bridge)。
我还是不放心,今天再次测试了一下
$ docker network ls
1230cf36f7d7 bridge bridge local
1797828bb68f host host local
7c21a101ee63 none null local
在 docker 创建后会默认创建如下的 3 个网络,bridge 为 default 模式。
我其实想测试一下如何使用 host 模式?
$ docker run --network=host -p 8088:80 nginx
WARNING: Published ports are discarded when using host network mode
这里会有个提示 host 模式的端口映射是会被丢弃的,简单点说 -p
参数无效。
因为 host 模式的所用的网络资源都会依赖于宿主机的网络,但是这个 nginx 服务对外暴露的 80 端口应该通过宿主机的 ip 可以直接访问。
$ curl localhost
curl: (7) Failed to connect to localhost port 80: Connection refused
$ curl 0.0.0.0
curl: (7) Failed to connect to 0.0.0.0 port 80: Connection refused
$ curl 192.168.1.3
curl: (7) Failed to connect to 192.168.1.3 port 80: Connection refused
我测试了 3 个地址,都是无法访问到我起的 nginx 服务。后面找到一个文档提到了“mac系统没办法用host网络模式!”
mac系统没办法用host网络模式!
所以只能 ssh 到服务器上,随便找了一台 ecs
$ docker run -d --network=host nginx
等待容器运行结束,我们就可以通过 ecs 的外网地址访问到刚刚启动的 nginx 服务了。
网友评论