使用主机网络进行联网

本系列教程讲解了独立容器的联网,这些容器直接绑定到 Docker 主机的网络,不进行网络隔离。有关其他联网主题,请参阅概述

目标

本教程的目标是启动一个直接绑定到 Docker 主机端口 80 的 nginx 容器。从网络角度看,这与 nginx 进程直接运行在 Docker 主机上而非容器中具有相同的隔离级别。然而,在所有其他方面,如存储、进程命名空间和用户命名空间,nginx 进程与主机是隔离的。

先决条件

  • 此步骤要求 Docker 主机上端口 80 可用。要让 Nginx 侦听不同的端口,请参阅nginx 镜像的文档

  • host 网络驱动程序仅在 Linux 主机上可用,并且是 Docker Desktop 4.34 及更高版本中的一个可选功能。要在 Docker Desktop 中启用此功能,请导航到设置中的资源选项卡,然后在网络下选择启用主机联网

步骤

  1. 将容器创建并作为分离进程启动。--rm 选项表示容器退出/停止时移除它。-d 标志表示以分离模式(在后台)启动容器。

    $ docker run --rm -d --network host --name my_nginx nginx
    
  2. 通过浏览http://localhost:80/ 访问 Nginx。

  3. 使用以下命令检查你的网络堆栈

    • 检查所有网络接口,并验证是否未创建新的网络接口。

      $ ip addr show
      
    • 使用 netstat 命令验证哪个进程绑定到端口 80。你需要使用 sudo,因为该进程属于 Docker 守护进程用户,否则你将无法看到其名称或 PID。

      $ sudo netstat -tulpn | grep :80
      
  4. 停止容器。由于它是使用 --rm 选项启动的,因此将在退出时自动移除。

    docker container stop my_nginx
    

其他联网教程

页面选项