Docker 网络模式和端口映射

Docker 网络模式

1. bridge 网络(默认模式)

  • 默认的网络模式
  • Docker 安装时会创建一个名为 docker0 的 Linux bridge
  • 容器间可以通过这个桥接网络通信
  • 使用方法:
    docker run --network bridge ...

2. host 网络

  • 容器直接使用宿主机的网络栈
  • 性能较好,但缺少隔离性
  • 使用方法:
    docker run --network host ...

3. none 网络

  • 容器没有网络接口,完全隔离
  • 适用于不需要网络的场景
  • 使用方法:
    docker run --network none ...

4. overlay 网络

  • 用于 Docker Swarm 中的跨主机容器通信
  • 创建方法:
    docker network create -d overlay my_overlay_network

5. macvlan 网络

  • 允许为容器分配 MAC 地址,使其像物理设备一样出现在网络上
  • 创建方法:
    docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth0 my_macvlan_network

自定义桥接网络

创建自定义桥接网络:

docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 my_custom_bridge

容器间通信

  1. 同一网络中的容器可以直接通信
  2. 不同网络中的容器默认不能通信
  3. 可以将容器连接到多个网络:
    docker network connect my_custom_bridge container_name

Docker 端口映射

端口映射允许外部网络访问容器内的服务。

端口映射语法

docker run -p [<host_ip>:]<host_port>:<container_port> ...

示例:

  • 映射特定端口:
    docker run -p 8080:80 nginx
  • 映射到随机端口:
    docker run -p 80 nginx
  • 指定 IP 和端口:
    docker run -p 127.0.0.1:8080:80 nginx

查看端口映射

docker port container_name

网络故障排查

  1. 检查网络列表:
    docker network ls
  2. 检查网络详情:
    docker network inspect network_name
  3. 容器网络信息:
    docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name
  4. 使用 docker exec 进入容器进行网络测试
THE END