Debian环境下Docker网络配置技巧
在Debian系统上,使用docker network ls命令可快速查看当前Docker环境中的所有网络(默认包含bridge、host、none等网络)。若需了解某个网络的详细配置(如子网、网关、连接的容器),可通过docker network inspect <网络名称>命令查看,例如docker network inspect bridge。
默认的bridge网络无法满足复杂场景需求(如容器间通过名称直接通信),建议创建自定义网络:
docker network create --driver bridge <网络名称>命令,例如docker network create --driver bridge my_bridge。创建后可指定子网和网关以规范IP分配,例如docker network create --subnet=192.168.1.0/24 --gateway=192.168.1.1 my_bridge。--ip参数指定静态IP。例如,先创建网络docker network create --subnet=172.18.0.0/16 --gateway=172.18.0.1 my_network,再运行容器时指定IP:docker run -d --network my_network --ip 172.18.0.10 --name my_nginx nginx。docker run -d --network my_bridge --name my_db --hostname db_alias mysql,其他容器可通过db_alias访问该MySQL容器。Docker提供四种核心网络模式,需根据场景选择:
docker0通信,需通过-p参数映射端口(如-p 8080:80)暴露服务。适用于单机多容器隔离环境(如开发测试),容器间可通过服务名直接通信(需自定义Bridge网络)。--net=container:<容器ID或名称>)。共享网络的容器可通过localhost直接通信,无需暴露端口。适用于紧密关联的容器组(如日志收集器与应用容器)。nsenter进入容器命名空间)。适用于安全敏感场景(如离线数据处理)或自定义网络栈调试。my_bridge网络中的web容器可通过ping db访问同网络中的db容器(前提是db容器已连接到my_bridge网络)。docker network connect <目标网络> <容器名称>)。例如,将web容器连接到my_bridge和my_other_network,则web容器可访问这两个网络中的所有容器。若需全局配置Docker网络(如自定义DNS、调整网络参数),可编辑/etc/docker/daemon.json文件。例如,添加自定义DNS服务器:
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
修改后需重启Docker服务使配置生效:sudo systemctl restart docker。
对于多容器应用(如Web+数据库+缓存),可使用Docker Compose简化网络配置。创建docker-compose.yml文件,定义网络和服务的关联:
version: '3'
services:
web:
image: nginx
networks:
- my_bridge_network
db:
image: mysql
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
subnet: 192.168.1.0/24
gateway: 192.168.1.1
通过docker-compose up -d命令启动服务,Compose会自动创建网络并连接容器。