promovaweb-devops-docker-networking
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSkill 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âmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| driver | enum | Não | bridge | bridge/overlay/host/macvlan |
| subnet | string | Não | - | CIDR de sub-rede personalizada |
| internal | boolean | Não | false | Rede apenas interna |
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| driver | 枚举 | 否 | bridge | 可选值:bridge/overlay/host/macvlan |
| subnet | 字符串 | 否 | - | 自定义子网CIDR |
| internal | 布尔值 | 否 | false | 是否为仅内部网络 |
Drivers de Rede
网络驱动
| Driver | Caso de Uso | Multi-Host | Criptografia |
|---|---|---|---|
| bridge | Host único, padrão | Não | Não |
| overlay | Swarm, multi-host | Sim | Opcional |
| host | Performance máxima | Não | N/A |
| macvlan | Rede física | Não | Não |
| none | Desabilitar rede | Não | N/A |
| 驱动 | 适用场景 | 多主机支持 | 加密 |
|---|---|---|---|
| bridge | 单主机场景,默认驱动 | 否 | 否 |
| overlay | Swarm、多主机场景 | 是 | 可选 |
| host | 最高性能场景 | 否 | 不适用 |
| macvlan | 物理网络场景 | 否 | 否 |
| none | 禁用网络 | 否 | 不适用 |
Exemplos de Configuração
配置示例
Rede Bridge Personalizada
自定义Bridge网络
bash
undefinedbash
undefinedCriar rede com sub-rede personalizada
创建带自定义子网的网络
docker network create
--driver bridge
--subnet 172.28.0.0/16
--gateway 172.28.0.1
my_network
--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
--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
--network my_network
nginx:alpine
undefineddocker run -d --name app
--network my_network
nginx:alpine
--network my_network
nginx:alpine
undefinedNetworking 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 externoyaml
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
undefinedyaml
undefinedContainers 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
undefinedservices:
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
undefinedRede Overlay (Swarm)
Overlay网络(Swarm场景)
bash
undefinedbash
undefinedCriar a rede pública do Swarm (Overlay)
创建Swarm公共网络(Overlay)
docker network create
--driver overlay
--attachable
--opt encrypted
network_swarm_public
--driver overlay
--attachable
--opt encrypted
network_swarm_public
undefineddocker network create
--driver overlay
--attachable
--opt encrypted
network_swarm_public
--driver overlay
--attachable
--opt encrypted
network_swarm_public
undefinedMapeamento de Portas
端口映射
bash
undefinedbash
undefinedMapear 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
undefineddocker run -p 53:53/udp dnsserver
undefinedTratamento de Erros
错误处理
Erros Comuns
常见错误
| Erro | Causa | Solução |
|---|---|---|
| Erro de digitação ou excluída | Crie a rede |
| Conflito de porta | Altere a porta |
| Rede errada | Verifique a participação na rede |
| Serviço não está pronto | Adicione health checks |
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 名称输入错误或网络已被删除 | 创建对应网络 |
| 端口冲突 | 修改映射的端口 |
| 网络配置错误 | 检查容器是否加入对应网络 |
| 服务尚未启动完成 | 添加健康检查 |
Estratégia de Fallback
降级策略
- Verifique se a rede existe:
docker network ls - Verifique a participação do container:
docker network inspect <net> - Teste o DNS:
docker exec app nslookup backend
- 检查网络是否存在:
docker network ls - 检查容器是否加入网络:
docker network inspect <网络名称> - 测试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? a partir do container
nslookup - Porta mapeada?
docker port <container>
- 网络已创建?执行确认
docker network ls - 容器已连接到网络?执行确认
docker inspect <容器ID/名称> - DNS解析正常?从容器内执行测试
nslookup - 端口已映射?执行确认
docker port <容器ID/名称>
Comandos de Diagnóstico
诊断命令
bash
undefinedbash
undefinedListar 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
undefineddocker port <容器名称>
undefinedDepuração de Rede (Network Debugging)
网络调试
bash
undefinedbash
undefinedEntrar 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
undefinedping -c 3 backend
curl http://backend:3000/health
undefined