容器网络基础
Docker 容器的网络配置、端口映射、容器间通信
📋 目录
网络模式
Bridge 模式(默认)
每个容器都有独立的网络命名空间,通过 Docker 网桥连接。
# 使用默认 bridge 网络
docker run -d --network bridge nginx:latestHost 模式
容器直接使用宿主机的网络。
# 使用 host 网络
docker run -d --network host nginx:latestNone 模式
容器没有网络接口。
# 使用 none 网络
docker run -d --network none nginx:latestContainer 模式
容器共享另一个容器的网络命名空间。
# 共享容器的网络
docker run -d --network container:other-container nginx:latest端口映射
-p / —publish
映射容器端口到宿主机端口。
# 映射端口(自动绑定所有接口)
docker run -d -p 8080:80 nginx:latest
# 映射端口(指定 IP)
docker run -d -p 127.0.0.1:8080:80 nginx:latest
# 映射端口(自动分配宿主机端口)
docker run -d -p 80 nginx:latest
# 映射多个端口
docker run -d -p 8080:80 -p 8443:443 nginx:latest
# 映射 UDP 端口
docker run -d -p 53:53/udp dns-server:latest-P / —publish-all
自动映射所有 EXPOSE 的端口。
# 自动映射所有端口
docker run -d -P nginx:latest容器间通信
默认 Bridge 网络
同一 bridge 网络中的容器可以通过容器名或 IP 通信。
# 创建两个容器
docker run -d --name web nginx:latest
docker run -d --name app myapp:latest
# 在 app 容器中访问 web 容器
docker exec app curl http://web自定义网络
使用自定义网络可以更好地管理容器通信。
# 创建自定义网络
docker network create my-network
# 将容器连接到网络
docker run -d --name web --network my-network nginx:latest
docker run -d --name app --network my-network myapp:latest
# 容器可以通过名称通信
docker exec app curl http://web自定义网络
创建网络
# 创建 bridge 网络
docker network create my-network
# 创建网络并指定子网
docker network create --subnet=172.20.0.0/16 my-network
# 创建网络并指定网关
docker network create \
--subnet=172.20.0.0/16 \
--gateway=172.20.0.1 \
my-network管理网络
# 列出所有网络
docker network ls
# 查看网络详细信息
docker network inspect my-network
# 删除网络
docker network rm my-network
# 删除所有未使用的网络
docker network prune连接容器到网络
# 运行容器时连接到网络
docker run -d --network my-network nginx:latest
# 将运行中的容器连接到网络
docker network connect my-network my-container
# 断开容器与网络的连接
docker network disconnect my-network my-container网络隔离
网络隔离原理
不同网络中的容器默认无法通信,实现网络隔离。
# 创建两个网络
docker network create network1
docker network create network2
# 在不同网络中创建容器
docker run -d --name app1 --network network1 myapp:latest
docker run -d --name app2 --network network2 myapp:latest
# app1 和 app2 无法直接通信多网络连接
容器可以连接到多个网络。
# 创建两个网络
docker network create frontend
docker network create backend
# 容器连接到多个网络
docker run -d --name web --network frontend nginx:latest
docker network connect backend webDNS 配置
容器 DNS
容器使用 Docker 的 DNS 服务器解析容器名。
# 查看容器 DNS 配置
docker inspect -f '{{.NetworkSettings.DNS}}' my-container自定义 DNS
# 使用自定义 DNS 服务器
docker run -d --dns 8.8.8.8 nginx:latest
# 使用多个 DNS 服务器
docker run -d --dns 8.8.8.8 --dns 8.8.4.4 nginx:latest
# 添加 DNS 搜索域
docker run -d --dns-search example.com nginx:latest/etc/hosts
# 添加主机名映射
docker run -d --add-host hostname:192.168.1.100 nginx:latest实用示例
Web 应用 + 数据库
# 创建网络
docker network create app-network
# 启动数据库
docker run -d \
--name db \
--network app-network \
-e POSTGRES_PASSWORD=password \
postgres:13
# 启动 Web 应用
docker run -d \
--name web \
--network app-network \
-p 8080:80 \
-e DATABASE_URL=postgres://db:5432/mydb \
myapp:latest微服务架构
# 创建网络
docker network create microservices
# 启动各个服务
docker run -d --name api --network microservices api:latest
docker run -d --name auth --network microservices auth:latest
docker run -d --name gateway --network microservices -p 80:80 gateway:latest