跨境独立站宝塔面板服务器容器网络互通隔离配置教程
宝塔面板下容器网络互通与隔离配置指南(跨境独立站场景)
运行跨境独立站时,宝塔面板里的多个容器(如 Nginx、PHP、Mysql)经常需要按场景互通或隔离。
如果直接使用默认 bridge 网络,容器之间只能通过 IP 访问,且重启后 IP 可能变化,造成服务中断。
本文一步步教你如何创建稳定、可控的容器网络,并设置隔离规则,让新手也能照做。
为什么要在宝塔面板中单独处理容器网络
宝塔面板默认安装 Docker 后,每个容器会分配到随机的私有 IP,同宿主机上不同容器的默认网络是互通的。
但在跨境独立站场景下,你往往需要:
- 让前端 Nginx 容器能访问后端 PHP 容器,但禁止 PHP 容器直接访问数据库容器(隔离提高安全性)。
- 或让多个站点共用同一个网络,方便用容器名通信(不怕 IP 变动)。
Docker 的自定义网络功能正好解决这个需求,而且宝塔面板后台对网络管理支持不够直观,所以需要手动操作命令行或配置文件完成。
操作前的环境检查清单
开始配置前,请确认以下条件:
- 宝塔面板版本建议 7.5 及以上(本文不依赖特定版本,但较新版本自带 Docker 管理器)。
- 服务器已安装 Docker 引擎(宝塔软件商店可直接安装)。
- 你已经有至少两个正在运行的容器(例如 Nginx、PHP)。
- 准备好 SSH 客户端(如 Xshell、Putty)或直接使用宝塔在线终端。
如果你尚未安装 Docker,可在宝塔后台“软件商店”搜索 Docker 并一键安装,安装完成后重启面板。
一步步实现容器网络互通
创建自定义 Docker 网络
打开终端,执行以下命令创建一个名为 cross_border_net 的 bridge 网络(名称可自定):
docker network create --driver bridge cross_border_net
将现有容器连接到自定义网络
假设你的 Nginx 容器叫 web,PHP 容器叫 php,执行:
docker network connect cross_border_net web
docker network connect cross_border_net php
连接后,两个容器就可以通过容器名互相 ping 通了。
测试一下:
docker exec -it web ping php
如果返回正常,说明网络互通已生效。
让新创建的容器自动使用该网络
后续启动新容器时,添加 --network cross_border_net 参数即可。
例如:
docker run -d --name new_app --network cross_border_net your_image
如何隔离容器间的网络访问
有些场景需要禁止容器间直接访问(例如数据库容器只允许特定应用连接)。
推荐两种方法:
方法一:使用独立的隔离网络
为敏感容器单独创建一个网络,不与其他容器共享网络名。
例如数据库容器使用 db_isolated_net:
docker network create --driver bridge --internal db_isolated_net
docker network connect db_isolated_net mysql
--internal 参数让该网络无法访问外网,且只有加入该网络的容器能互相通信。
其他普通容器(如 web)不连接此网络,就无法直接访问 mysql 容器。
方法二:利用宝塔面板防火墙或 iptables 规则
如果容器都在同一个自定义网络,又想限制特定端口,可以在宿主机上添加 iptables 规则(注意容器 IP 需固定)。
先给容器分配固定 IP:
docker network create --subnet=172.20.0.0/16 stable_net
docker run --network stable_net --ip 172.20.0.10 --name db mysql
然后执行 iptables 规则禁止其他容器访问数据库的 3306 端口:
iptables -A DOCKER -s 172.20.0.0/16 -d 172.20.0.10 -p tcp --dport 3306 -j DROP
注意:iptables 规则在容器重启可能失效,建议写入启动脚本固化。宝塔面板的“系统防火墙”插件也可以添加类似规则,但操作路径较长,新手更推荐用方法一。
常见故障与排查
容器重启后无法解析容器名:自定义网络中的容器名解析需要 Docker 内嵌 DNS 正常工作。
检查 /etc/docker/daemon.json 是否被修改过,并确保容器启动时未添加 --dns 覆盖。
如果需要,重启 Docker 服务:systemctl restart docker。
端口冲突导致容器启动失败:多个容器映射相同宿主机端口时会报错。
使用 docker ps -a 查看已占用的端口,或在启动时更换映射端口(如 -p 8080:80)。
宝塔后台容器管理不显示网络信息:
宝塔的容器模块功能有限,
建议通过命令行查看完整网络状态:docker network ls 和 docker network inspect cross_border_net。
验证你的配置是否正确
完成网络互通与隔离设置后,按以下步骤验证:
- 测试互通:在 web 容器内 ping php 容器名,应成功。
- 测试隔离:在 web 容器内 ping mysql 容器(如果 mysql 在隔离网络),应超时或连接拒绝。
- 查看网络详情:
docker network inspect cross_border_net
确认加入的容器列表和 IP 分配。
- 重启所有容器或服务器后,再次执行上述测试,确保持久化生效。
如果你在配置过程中遇到“容器网络不可达”或“宝塔后台报网络已存在”等具体报错,
优先检查容器是否已连接到目标网络(docker inspect 容器名 | grep Networks),
并确认网络名称拼写正确。
跨境独立站的网络稳定性直接影响用户访问体验,花十分钟按本文方法整理容器网络,能避免后期很多因 IP 变动或端口冲突导致的服务中断。
后续如需扩展更多容器,只要统一加入已规划好的网络即可。