Docker Compose网络配置:如何让WordPress容器稳定互通?
正确配置Docker Compose使用自定义桥接网络解决容器互通问题
你在VPS上托管2个WordPress站点,用Nginx Proxy Manager(NPM)做反向代理,之前手动用docker network connect命令让NPM和WordPress容器互通,但每次Docker重启或者执行docker compose down/up后,容器间的网络连接就会断开。现在想通过配置自定义的bridge_default网络到Compose文件里,彻底解决手动连接的麻烦,以下是正确的配置方法:
第一步:先创建自定义桥接网络
如果还没创建bridge_default网络,先执行这条命令:
docker network create bridge_default
第二步:修正WordPress的Docker Compose配置
你当前的Compose文件在网络定义部分写法有误,下面是修正后的完整配置:
version: "3" services: db: image: mariadb:10.6.4-focal restart: always networks: - bridge_default # 让数据库容器加入自定义网络 environment: MYSQL_ROOT_PASSWORD: PassWord#123 MYSQL_DATABASE: wordpress MYSQL_USER: admin MYSQL_PASSWORD: PassWord#123 volumes: - ./mysql:/var/lib/mysql # 挂载本地目录保存数据库数据,避免容器销毁丢失数据 wordpress: depends_on: - db image: wordpress:latest restart: always networks: - bridge_default # 让WordPress容器加入同一个自定义网络 environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: admin WORDPRESS_DB_PASSWORD: PassWord#123 WORDPRESS_DB_NAME: wordpress volumes: - ./wordpress:/var/www/html volumes: mysql: {} networks: bridge_default: external: true # 声明该网络是外部已创建的,Compose不会重新生成它
关键修改点说明:
- 把两个服务的
networks项从default改成bridge_default,直接关联自定义网络 - 在
networks区块里添加external: true,告诉Compose这个网络已经存在,不需要再创建 - 给
db服务补充了数据卷挂载,解决原配置中数据库数据无持久化的潜在问题
第三步:让Nginx Proxy Manager加入同一个网络
如果NPM是用Docker Compose部署的,在它的Compose文件里同样加入bridge_default网络:
services: nginx-proxy-manager: image: jc21/nginx-proxy-manager:latest restart: always networks: - bridge_default ports: - "80:80" - "81:81" - "443:443" volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt networks: bridge_default: external: true
如果NPM是单独运行的容器,执行这条命令让它加入网络:
docker network connect bridge_default <你的NPM容器名称>
这样配置后,不管是重启Docker还是启停Compose容器,所有关联到bridge_default网络的容器都会保持互通,再也不用手动执行连接命令了。
内容的提问来源于stack exchange,提问作者JeffPie
相关产品推荐
相关产品推荐

