promovaweb-devops-docker-networking

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Skill de Docker Networking

Docker网络技能

Domine os conceitos e a configuração de rede (networking) do Docker para comunicação entre containers, service discovery e isolamento de rede.
掌握Docker网络的概念与配置方法,实现容器间通信、服务发现和网络隔离。

Propósito

用途

Configurar e solucionar problemas em redes Docker para ambientes de desenvolvimento e produção com isolamento adequado e service discovery.
为开发和生产环境配置Docker网络并排查相关问题,实现合理的网络隔离和服务发现能力。

Parâmetros

参数

ParâmetroTipoObrigatórioPadrãoDescrição
driverenumNãobridgebridge/overlay/host/macvlan
subnetstringNão-CIDR de sub-rede personalizada
internalbooleanNãofalseRede apenas interna
参数类型必填默认值描述
driver枚举bridge可选值:bridge/overlay/host/macvlan
subnet字符串-自定义子网CIDR
internal布尔值false是否为仅内部网络

Drivers de Rede

网络驱动

DriverCaso de UsoMulti-HostCriptografia
bridgeHost único, padrãoNãoNão
overlaySwarm, multi-hostSimOpcional
hostPerformance máximaNãoN/A
macvlanRede físicaNãoNão
noneDesabilitar redeNãoN/A
驱动适用场景多主机支持加密
bridge单主机场景,默认驱动
overlaySwarm、多主机场景可选
host最高性能场景不适用
macvlan物理网络场景
none禁用网络不适用

Exemplos de Configuração

配置示例

Rede Bridge Personalizada

自定义Bridge网络

bash
undefined
bash
undefined

Criar rede com sub-rede personalizada

创建带自定义子网的网络

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

Executar container na rede

在该网络中运行容器

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

Networking no Docker Compose (Swarm)

Docker Compose中的网络配置(Swarm场景)

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

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

  database:
    image: postgres:16-alpine
    networks:
      - private  # Apenas interna

networks:
  network_swarm_public:
    external: true  # Rede pública compartilhada no Swarm
  private:
    driver: overlay
    internal: true  # Sem acesso externo
yaml
services:
  frontend:
    image: nginx:alpine
    networks:
      - network_swarm_public
    ports:
      - "80:80"

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

  database:
    image: postgres:16-alpine
    networks:
      - private  # 仅内部访问

networks:
  network_swarm_public:
    external: true  # Swarm中共享的公共网络
  private:
    driver: overlay
    internal: true  # 无外部访问权限

Service Discovery

服务发现

yaml
undefined
yaml
undefined

Containers podem alcançar uns aos outros pelo nome do serviço

容器之间可以通过服务名称互相访问

services: app: image: myapp networks: - network_swarm_public environment: # Use o nome do serviço como hostname DATABASE_HOST: database CACHE_HOST: redis
database: image: postgres:16-alpine networks: - network_swarm_public
redis: image: redis:alpine networks: - network_swarm_public
undefined
services: app: image: myapp networks: - network_swarm_public environment: # 使用服务名称作为主机名 DATABASE_HOST: database CACHE_HOST: redis
database: image: postgres:16-alpine networks: - network_swarm_public
redis: image: redis:alpine networks: - network_swarm_public
undefined

Rede Overlay (Swarm)

Overlay网络(Swarm场景)

bash
undefined
bash
undefined

Criar a rede pública do Swarm (Overlay)

创建Swarm公共网络(Overlay)

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

Mapeamento de Portas

端口映射

bash
undefined
bash
undefined

Mapear host:container

映射格式 主机端口:容器端口

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

Vincular a uma interface específica

绑定到指定网卡

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

Porta do host aleatória

随机分配主机端口

docker run -P nginx
docker run -P nginx

Porta UDP

UDP端口映射

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

Tratamento de Erros

错误处理

Erros Comuns

常见错误

ErroCausaSolução
network not found
Erro de digitação ou excluídaCrie a rede
address in use
Conflito de portaAltere a porta
cannot reach
Rede erradaVerifique a participação na rede
DNS failed
Serviço não está prontoAdicione health checks
错误原因解决方案
network not found
名称输入错误或网络已被删除创建对应网络
address in use
端口冲突修改映射的端口
cannot reach
网络配置错误检查容器是否加入对应网络
DNS failed
服务尚未启动完成添加健康检查

Estratégia de Fallback

降级策略

  1. Verifique se a rede existe:
    docker network ls
  2. Verifique a participação do container:
    docker network inspect <net>
  3. Teste o DNS:
    docker exec app nslookup backend
  1. 检查网络是否存在:
    docker network ls
  2. 检查容器是否加入网络:
    docker network inspect <网络名称>
  3. 测试DNS解析:
    docker exec app nslookup backend

Solução de Problemas (Troubleshooting)

故障排查

Checklist de Depuração

调试检查清单

  • Rede criada?
    docker network ls
  • Container conectado?
    docker inspect <container>
  • DNS resolvendo?
    nslookup
    a partir do container
  • Porta mapeada?
    docker port <container>
  • 网络已创建?执行
    docker network ls
    确认
  • 容器已连接到网络?执行
    docker inspect <容器ID/名称>
    确认
  • DNS解析正常?从容器内执行
    nslookup
    测试
  • 端口已映射?执行
    docker port <容器ID/名称>
    确认

Comandos de Diagnóstico

诊断命令

bash
undefined
bash
undefined

Listar redes

列出所有网络

docker network ls
docker network ls

Inspecionar rede

查看网络详情

docker network inspect my_network
docker network inspect my_network

Testar conectividade

测试连通性

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

Verificar DNS

检查DNS解析

docker exec app nslookup backend
docker exec app nslookup backend

Visualizar mapeamentos de porta

查看端口映射关系

docker port nome_do_container
undefined
docker port <容器名称>
undefined

Depuração de Rede (Network Debugging)

网络调试

bash
undefined
bash
undefined

Entrar no namespace de rede do container

进入容器的网络命名空间

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

Verificar resolução de DNS

查看DNS配置

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

Verificar conectividade

测试连通性

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