docker-networking

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Docker Networking Skill

Docker 网络技能

Master Docker networking concepts and configuration for container communication, service discovery, and network isolation.
掌握Docker网络的概念与配置,实现容器通信、服务发现和网络隔离。

Purpose

用途

Configure and troubleshoot Docker networks for development and production environments with proper isolation and service discovery.
为开发和生产环境配置并排查Docker网络问题,实现合理的网络隔离与服务发现。

Parameters

参数

ParameterTypeRequiredDefaultDescription
driverenumNobridgebridge/overlay/host/macvlan
subnetstringNo-Custom subnet CIDR
internalbooleanNofalseInternal-only network
参数类型是否必填默认值说明
driver枚举bridgebridge/overlay/host/macvlan
subnet字符串-自定义子网CIDR
internal布尔值false仅内部访问网络

Network Drivers

网络驱动

DriverUse CaseMulti-HostEncryption
bridgeSingle host, defaultNoNo
overlaySwarm, multi-hostYesOptional
hostMax performanceNoN/A
macvlanPhysical networkNoNo
noneDisable networkingNoN/A
驱动适用场景多主机支持加密支持
bridge单主机(默认)
overlaySwarm集群、多主机可选
host极致性能不适用
macvlan物理网络接入
none禁用网络不适用

Configuration Examples

配置示例

Custom Bridge Network

自定义桥接网络

bash
undefined
bash
undefined

Create network with custom subnet

Create network with custom subnet

docker network create
--driver bridge
--subnet 172.28.0.0/16
--gateway 172.28.0.1
my_network
docker network create
--driver bridge
--subnet 172.28.0.0/16
--gateway 172.28.0.1
my_network

Run container on network

Run container on network

docker run -d --name app
--network my_network
nginx:alpine
undefined
docker run -d --name app
--network my_network
nginx:alpine
undefined

Docker Compose Networking

Docker Compose 网络配置

yaml
services:
  frontend:
    image: nginx:alpine
    networks:
      - public
    ports:
      - "80:80"

  backend:
    image: node:20-alpine
    networks:
      - public
      - private
    expose:
      - "3000"

  database:
    image: postgres:16-alpine
    networks:
      - private  # Internal only

networks:
  public:
    driver: bridge
  private:
    driver: bridge
    internal: true  # No external access
yaml
services:
  frontend:
    image: nginx:alpine
    networks:
      - public
    ports:
      - "80:80"

  backend:
    image: node:20-alpine
    networks:
      - public
      - private
    expose:
      - "3000"

  database:
    image: postgres:16-alpine
    networks:
      - private  # Internal only

networks:
  public:
    driver: bridge
  private:
    driver: bridge
    internal: true  # No external access

Service Discovery

服务发现

yaml
undefined
yaml
undefined

Containers can reach each other by service name

Containers can reach each other by service name

services: app: image: myapp environment: # Use service name as hostname DATABASE_HOST: database CACHE_HOST: redis
database: image: postgres:16-alpine
redis: image: redis:alpine
undefined
services: app: image: myapp environment: # Use service name as hostname DATABASE_HOST: database CACHE_HOST: redis
database: image: postgres:16-alpine
redis: image: redis:alpine
undefined

Overlay Network (Swarm)

覆盖网络(Swarm)

bash
undefined
bash
undefined

Create encrypted overlay

Create encrypted overlay

docker network create
--driver overlay
--attachable
--opt encrypted
my_overlay
undefined
docker network create
--driver overlay
--attachable
--opt encrypted
my_overlay
undefined

Port Mapping

端口映射

bash
undefined
bash
undefined

Map host:container

Map host:container

docker run -p 8080:80 nginx
docker run -p 8080:80 nginx

Bind to specific interface

Bind to specific interface

docker run -p 127.0.0.1:8080:80 nginx
docker run -p 127.0.0.1:8080:80 nginx

Random host port

Random host port

docker run -P nginx
docker run -P nginx

UDP port

UDP port

docker run -p 53:53/udp dnsserver
undefined
docker run -p 53:53/udp dnsserver
undefined

Error Handling

错误处理

Common Errors

常见错误

ErrorCauseSolution
network not found
Typo or deletedCreate network
address in use
Port conflictChange port
cannot reach
Wrong networkCheck network membership
DNS failed
Service not readyAdd health checks
错误信息原因解决方法
network not found
名称拼写错误或网络已被删除创建对应网络
address in use
端口冲突修改端口
cannot reach
网络归属错误检查容器所属网络
DNS failed
服务未就绪添加健康检查

Fallback Strategy

回退策略

  1. Verify network exists:
    docker network ls
  2. Check container membership:
    docker network inspect <net>
  3. Test DNS:
    docker exec app nslookup backend
  1. 验证网络是否存在:
    docker network ls
  2. 检查容器网络归属:
    docker network inspect <net>
  3. 测试DNS解析:
    docker exec app nslookup backend

Troubleshooting

故障排查

Debug Checklist

调试检查清单

  • Network created?
    docker network ls
  • Container connected?
    docker inspect <container>
  • DNS resolving?
    nslookup
    from container
  • Port mapped?
    docker port <container>
  • 网络已创建?
    docker network ls
  • 容器已连接网络?
    docker inspect <container>
  • DNS解析正常?在容器内执行
    nslookup
  • 端口已映射?
    docker port <container>

Diagnostic Commands

诊断命令

bash
undefined
bash
undefined

List networks

List networks

docker network ls
docker network ls

Inspect network

Inspect network

docker network inspect my_network
docker network inspect my_network

Test connectivity

Test connectivity

docker exec app ping -c 3 database
docker exec app ping -c 3 database

Check DNS

Check DNS

docker exec app nslookup backend
docker exec app nslookup backend

View port mappings

View port mappings

docker port container_name
undefined
docker port container_name
undefined

Network Debugging

网络调试

bash
undefined
bash
undefined

Enter container network namespace

Enter container network namespace

docker exec -it app sh
docker exec -it app sh

Check DNS resolution

Check DNS resolution

cat /etc/resolv.conf nslookup database
cat /etc/resolv.conf nslookup database

Check connectivity

Check connectivity

ping -c 3 backend curl http://backend:3000/health
undefined
ping -c 3 backend curl http://backend:3000/health
undefined

Usage

使用方式

Skill("docker-networking")
Skill("docker-networking")

Related Skills

相关技能

  • docker-compose-setup
  • docker-swarm
  • docker-compose-setup
  • docker-swarm