使用 host 网络的联网
本系列的教程涉及直接绑定在 Docker 宿主机网络上而不隔离网络的独立容器的联网问题。如果想了解更多 Docker 网络的理论知识,参考概述。
目的
本教程的目的是启动一个 nginx
容器,直接绑定到 Docker 宿主机的80端口。从网络的角度来看,这与 nginx
进程直接运行在 Docker 宿主机上而不是在容器中的隔离程度相同。然而,在所有其他方面,如存储、进程名称空间和用户名称空间,nginx
进程与主机是隔离的。
先决条件
-
这个过程要求Docker主机上的80端口是可用的。要让Nginx监听一个不同的端口,请看 nginx 镜像的文档
-
host
网络驱动只适用于Linux主机,不支持Docker Desktop for Mac、Docker Desktop for Windows或Docker EE for Windows Server。
步骤
-
创建并启动容器作为一个分离的进程。
--rm
选项意味着一旦容器退出/停止就将其移除。-d
标志意味着以分离的方式(在后台)启动该容器。$ docker run --rm -d --network host --name my_nginx nginx
-
用浏览器打开 http://localhost:80/,访问nginx。
-
使用以下命令检查协你的协议栈:
-
检查所有的网络接口,确保没有新的接口被创建出来。
$ ip addr show
-
使用
netstat
命令,验证哪个进程被绑定到80端口。你需要用sudo
,因为该进程是由Docker deamon 用户拥有的,不用sudo
你将无法看到它的名字或PID。$ sudo netstat -tulpn | grep :80
-
-
停止容器。由于用了
--rm
选项,因此它会被自动删除掉。docker container stop my_nginx
其他的网络教程
现在你已经完成了独立容器的网络教程,你可能想跑一下其他的: