使用主机网络进行网络连接

本系列教程介绍了直接绑定到 Docker 主机网络的独立容器的网络连接,没有网络隔离。有关其他网络主题,请参阅概述

目标

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

先决条件

  • 此过程需要 Docker 主机上端口 80 可用。要使 Nginx 监听其他端口,请参阅nginx镜像文档

  • host 网络驱动程序仅在 Linux 主机上有效,但作为测试版功能在 Docker Desktop 版本 4.29 及更高版本(适用于 Mac、Windows 和 Linux)中可用。要启用此功能,请导航到设置中的正在开发的功能选项卡,然后选择启用主机网络

步骤

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

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

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

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

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

      $ sudo netstat -tulpn | grep :80
      
  4. 停止容器。由于该容器使用--rm 选项启动,它将自动删除。

    docker container stop my_nginx
    

其他网络教程