插件窝 干货文章 如何在Linux上配置容器网络

如何在Linux上配置容器网络

Docker 容器 网络 bash 818    来源:    2025-04-16

在Linux上配置容器网络需要根据具体需求选择网络模式(如桥接、主机、Overlay等),并掌握工具链(如Docker、Podman等)。以下是详细配置指南:


一、常见容器网络模式

  1. Bridge(默认桥接)

    • 容器通过虚拟网桥(如docker0)通信
    • 示例(Docker): bash docker run --network=bridge -it alpine
  2. Host(主机模式)

    • 容器直接使用主机网络栈
    • 示例: bash docker run --network=host -it nginx
  3. Overlay(跨主机网络)

    • 用于Swarm/Kubernetes集群
    • 需先初始化Swarm: bash docker swarm init docker network create -d overlay my-overlay
  4. Macvlan/IPvlan

    • 为容器分配真实MAC/IP
    • 示例: bash docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my-macvlan

二、Docker网络配置实践

1. 自定义桥接网络

# 创建自定义网络
docker network create --driver=bridge --subnet=172.18.0.0/16 my-bridge

# 运行容器并指定IP
docker run --network=my-bridge --ip=172.18.0.100 -it alpine

2. 端口映射

docker run -p 8080:80 -d nginx  # 主机8080映射到容器80端口

3. 查看网络配置

docker network ls
docker inspect <network_id>

三、高级配置(使用iproute2

  1. 查看网络命名空间

    ip netns list  # Docker需先创建符号链接
    ls /var/run/docker/netns/
    
  2. 手动连接容器到网络

    # 创建veth pair
    ip link add veth0 type veth peer name veth1
    
    # 将一端放入容器网络命名空间
    docker inspect -f '{{.State.Pid}}' <container_id> > pid
    ip link set veth1 netns $(cat pid)
    

四、CNI插件(Kubernetes场景)

  1. 安装Flannel

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
  2. Calico配置示例

    kubectl create -f https://docs.projectcalico.org/manifests/calico.yaml
    

五、故障排查工具

工具 用途
ping 测试基础连通性
dig/nslookup DNS解析检查
tcpdump 抓包分析(例:tcpdump -i docker0
conntrack 跟踪NAT连接
ss/netstat 查看端口监听状态

六、安全建议

  1. 限制容器网络能力: bash docker run --cap-drop=NET_RAW ...
  2. 启用网络策略(Kubernetes): yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny spec: podSelector: {} policyTypes: ["Ingress"]

通过以上配置,您可以根据场景需求构建灵活、安全的容器网络。对于生产环境,建议结合监控工具(如Prometheus+Granfana)持续观察网络性能指标。