CentOS下Docker网络配置指南
Docker支持多种网络模式,核心模式及特点如下:
docker0连接,分配私有IP(默认172.17.0.0/16),通过NAT与宿主机通信,需手动映射端口(-p参数)才能访问外网。容器间可通过IP通信,但无法通过名称直接访问(需用--link,不推荐)。使用docker network ls命令查看Docker已有的网络,包括bridge(默认)、host、none及自定义网络。
自定义网络能提升容器管理的灵活性,推荐使用Bridge驱动(最常用):
# 创建Bridge网络(指定子网和网关)
docker network create --driver bridge --subnet 192.168.1.0/24 --gateway 192.168.1.1 my_bridge
# 创建Host网络(直接使用宿主机网络)
docker network create --driver host my_host
# 创建Overlay网络(用于Swarm集群)
docker network create --driver overlay my_overlay
自定义Bridge网络的优势:容器间可通过名称直接访问(无需--link),端口无需映射即可被同网络容器访问。
# 连接到自定义Bridge网络
docker run -d --network my_bridge --name my_nginx nginx
# 连接到Host网络
docker run -d --network host --name my_redis redis
# 连接到Overlay网络(Swarm模式)
docker service create --name my_service --network my_overlay nginx
docker network connect my_bridge my_existing_container
--subnet(子网)和--gateway(网关)参数指定,如上述my_bridge示例。/etc/docker/daemon.json文件,配置默认网桥参数(需重启Docker生效):{
  "bip": "192.168.1.1/24",          // 默认Bridge网络的IP
  "fixed-cidr": "192.168.1.0/24",   // 容器IP分配范围
  "mtu": 1500,                      // 最大传输单元
  "default-address-pools": [        // 默认地址池(用于自定义Bridge网络)
    {
      "base": "192.168.2.0/24",
      "size": 24
    }
  ]
}
保存后执行systemctl restart docker重启服务。使用docker network inspect <网络名称/ID>命令查看网络的详细信息,包括连接的容器、子网、网关、IP分配情况等:
docker network inspect my_bridge
若不再需要某个网络,使用docker network rm <网络名称>命令删除(需确保网络中无容器连接):
docker network rm my_bridge
对于复杂的多容器应用,推荐使用Docker Compose通过docker-compose.yml文件定义网络,简化部署流程:
version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"  # 映射宿主机8080端口到容器80端口
    networks:
      - my_bridge_network
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    networks:
      - my_bridge_network
networks:
  my_bridge_network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16  # 自定义子网
          gateway: 172.18.0.1
启动服务:
docker-compose up -d
Compose会自动创建my_bridge_network网络,web和db容器可通过名称(如web、db)直接通信。
-p参数映射端口(如-p 8080:80)。bridge网络(无法通过名称访问容器)。docker swarm init)。