docker network

吴书松
吴书松
发布于 2026-05-23 / 10 阅读
0

docker network

Docker 网络是 Docker 容器之间通信的基础设施,允许容器相互连接、与外部世界通信,以及隔离不同应用的网络环境。


1、network

Docker 默认网络驱动

驱动

用途

说明

bridge

单机容器通信

默认驱动,容器在同一宿主机内通过虚拟网桥通信

host

直接使用宿主机网络

容器与宿主机共享网络栈,无网络隔离

none

无网络

容器只有 loopback 接口,完全隔离

overlay

跨主机容器通信

用于 Docker Swarm 集群,容器跨节点通信

macvlan

容器拥有独立 MAC 地址

容器像物理机一样直接接入物理网络


常用命令

查看网络

docker network ls                    # 列出所有网络
docker network inspect <网络名>     # 查看网络详情(容器、IP、网关等)

创建网络

# 基础 bridge 网络
docker network create my-net

# 指定子网和网关
docker network create \
  --driver bridge \
  --subnet 192.168.10.0/24 \
  --gateway 192.168.10.1 \
  my-net

容器连接网络

# 运行容器时指定网络
docker run -d --name web --network my-net nginx

# 已有容器加入网络
docker network connect my-net redis-1

# 容器退出网络
docker network disconnect my-net redis-1

删除网络

docker network rm my-net           # 删除指定网络
docker network prune               # 删除所有未使用的网络

核心特性

1. 容器名称即 DNS

同一网络内的容器可通过容器名互相访问:

# web 容器可以直接 ping redis-1,无需知道 IP
docker exec web ping redis-1

2. 网络隔离

  • 不同 bridge 网络的容器默认无法通信

  • 实现多环境隔离(开发、测试、生产)

3. 端口映射(bridge 网络)

# 将容器端口映射到宿主机,供外部访问
docker run -p 8080:80 nginx
# 外部访问:宿主机IP:8080 → 容器内部:80

实际应用场景

场景

网络方案

单主机多容器应用

自定义 bridge 网络

微服务相互调用

同一 overlay/bridge 网络,用容器名通信

容器访问外部数据库

端口映射 -p 或 host 网络

高隔离安全要求

不同 bridge 网络 + 防火墙规则


与 Docker Compose 结合

不固定IP

version: '3.8'

services:
  redis:
    image: docker.1ms.run/library/redis:7.2
    container_name: redis-1
    ports:
      - "16479:6379"
    networks:
      - my-network

networks:
  my-network:
    driver: bridge
    ipam:
      config:
        - subnet: 192.160.1.0/24
          gateway: 192.160.1.1
version: '3.8'

services:
  redis:
    image: docker.1ms.run/library/redis:7.2
    container_name: redis-1
    restart: unless-stopped
    ports:
      - "16479:6379"
    networks:
      my-network:
        ipv4_address: 192.160.1.10    # 固定容器 IP(可选)
    # 如果之前遇到 Background Jobs 报错,加上下面这行
    # security_opt:
    #   - seccomp:unconfined

networks:
  my-network:
    driver: bridge
    ipam:
      config:
        - subnet: 192.160.1.0/24
          gateway: 192.160.1.1

Compose 自动创建网络,服务名即 DNS 名称。


总结

要点

说明

容器通信首选

容器名称(内置 DNS)

默认网络

bridge,但建议自定义

跨主机通信

用 overlay(Swarm/K8s 场景)

安全隔离

不同应用用不同网络

2、测试

2.1、创建网络

docker network create --driver bridge --gateway 192.160.1.1 --ip-range 192.160.1.0/24 --subnet 192.160.1.0/24 jm-cloud-network

2.2、查看网络

docker network ls
docker network inspect jm-cloud-network

2.3、服务使用这个网络

如,启动一个redis服务

docker run -d --name redis-1 --network jm-cloud-network -p 16479:6379 --security-opt seccomp=unconfined docker.1ms.run/library/redis:7.2

2.4、其他服务加入同一个网络怎么连接redis

1、容器内部IP(192.160.1.2:6379)

2、宿主机IP(192.168.1.111:16479)

3、容器名称(redis-1:6379)

推荐使用容器名称去连接,Docker 内置 DNS 解析,容器 IP 变化不影响连接

如一个springboot项目,做成docker镜像,加入同一个network,连接这个redis,那么可以做下面

# application.yml
spring:
  data:
    redis:
      host: redis-1        # 容器名称
      port: 6379           # Redis 容器内部端口
      password:            # 如果有密码填这里
      database: 0