Docker容器固定IP配置,内网容器互相访问

当你在同一台宿主机上运行多个Docker容器,并希望它们像局域网内的物理机一样通过固定IP互相访问时,默认的桥接网络往往不够用。
默认情况下,容器每次重启都可能获得新的IP,导致依赖IP的配置失效。
通过创建自定义网络并指定静态IP,可以让容器IP保持稳定,同时实现内网容器间的直接通信。
下面从准备到验证,一步步说明如何操作。

适用场景与准备工作

这个方法适合需要容器间稳定通信的开发测试环境,比如微服务架构中服务A需要固定访问服务B的数据库,或者你正在模拟一个多节点内网。
操作前请确保:

  • 已安装Docker Engine(版本不限,但建议使用较新版本,以官方文档为准)。
  • 拥有宿主机root权限或sudo权限。
  • 了解容器的基础操作,如docker rundocker network

注意:固定IP仅在同一自定义网络内有效,跨宿主机通信需要更复杂的覆盖网络方案。

创建自定义网络并指定子网

默认的bridge网络不支持指定静态IP,必须先创建一个自定义桥接网络。
在终端执行:

docker network create --subnet=172.20.0.0/16 mynet

这里--subnet定义了网段,mynet是网络名称。
你可以按需更换网段,避免与宿主机现有网络冲突。
创建后可用docker network ls查看网络列表,用docker network inspect mynet确认子网信息。

关键点:子网一旦创建,后续容器的静态IP必须在该子网范围内,否则会报错。

启动容器并分配固定IP

使用--network指定自定义网络,并用--ip指定静态IP。
例如启动两个容器:

docker run -d --name container1 --network mynet --ip 172.20.0.10 nginx
docker run -d --name container2 --network mynet --ip 172.20.0.11 nginx

这样container1的IP固定为172.20.0.10container2172.20.0.11
即使容器重启,IP也不会改变(只要网络存在且IP未被占用)。

如果容器已经运行,需要先停止并删除,再用上述命令重新创建。
直接修改运行中容器的IP是不支持的。

验证内网容器互访

进入container1,尝试pingcontainer2的IP:

docker exec -it container1 ping 172.20.0.11

如果看到回包,说明互访成功。
也可以使用curl测试HTTP服务(如果容器内运行了Web服务):

docker exec -it container1 curl http://172.20.0.11

预期结果:能ping通或返回HTTP响应。
如果失败,检查容器是否在同一网络(docker network inspect mynet查看容器列表),以及IP是否冲突。

避坑指南:常见错误与处理

  • 报错“user specified IP address is supported only when connecting to networks with user configured subnets”:说明你使用的网络不是自定义网络,或者创建网络时未指定--subnet。请重新创建网络。
  • IP地址已被占用:同一网络内IP不能重复。如果启动时提示Address already in use,换一个IP或删除占用该IP的容器。
  • 容器重启后IP变化:只有通过--ip指定的静态IP才会固定。如果使用默认动态分配,重启后IP可能改变。
  • 跨网络通信:不同自定义网络默认隔离,需要将容器连接到多个网络,或使用docker network connect

重要提醒:静态IP一旦分配,即使容器停止,该IP也不会自动释放,直到容器被删除。
规划IP时建议预留一段范围。

效果确认与日常维护

完成配置后,可以通过以下命令复查:

docker network inspect mynet

在输出中找到Containers部分,确认每个容器的IPv4地址与预期一致。
日常维护中,如果新增容器,记得使用同一网络并分配未使用的IP。
删除容器后,IP会自动释放,可以重新分配。

如果后续需要修改子网或IP,必须删除并重建网络,同时重新创建所有容器。
因此建议在初期规划好网段和IP分配表。

一句话总结:Docker容器固定IP配置的核心是“自定义网络+静态IP参数”,内网互访只需保证容器在同一自定义网络且IP不冲突。

常见疑问

问:能否在默认bridge网络上使用固定IP?

答:不能。
默认bridge网络由Docker管理,不支持用户指定IP。
必须创建自定义网络。

问:容器固定IP后,宿主机如何访问?

答:宿主机可以直接通过容器IP访问,因为自定义网络在宿主机上创建了虚拟网桥。
如果无法访问,检查防火墙规则是否放行。

问:多个容器需要相同IP但不同网络怎么办?

答:不同网络之间IP可以重复,因为网络隔离。
但容器无法直接跨网络通信,需要额外配置。

问:Docker Compose中如何指定静态IP?

答:在Compose文件的networks部分定义自定义网络并指定子网,然后在服务下使用ipv4_address字段。
例如:

networks:
  mynet:
    ipam:
      config:
        - subnet: 172.20.0.0/16
services:
  web:
    networks:
      mynet:
        ipv4_address: 172.20.0.10

这样也能实现固定IP。

按照以上步骤操作后,你的容器就拥有了稳定的内网IP,互相访问不再受重启影响。
如果遇到异常,优先检查网络配置和IP冲突。

分享到:
上一篇
Windows服务器IIS日志清理
下一篇
Docker镜像瘦身,减小建站环境镜像体积
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意