You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建符合要求的Nginx反向代理+WordPress+MySQL的Docker Compose文件

解决方案:让WordPress通过127.0.0.1连接MySQL的Docker Compose配置

要满足WordPress通过127.0.0.1连接MySQL且不使用host网络的要求,核心是让两个容器共享同一个网络命名空间——这样WordPress容器内的127.0.0.1就会指向MySQL容器的网络栈。同时补全Nginx反向代理的必要配置,确保流量能正确转发到WordPress。

修改后的完整配置

docker-compose.yaml

version: '3.1'

services:
  wordpress:
    image: wordpress:beta-php8.2-apache
    container_name: wordpress
    hostname: wordpress
    restart: always
    networks:
      - service-network
    depends_on:
      - db
    environment:
      WORDPRESS_DB_HOST: 127.0.0.1:3306  # 改为127.0.0.1连接
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    hostname: db
    container_name: db
    # 共享WordPress的网络命名空间,实现127.0.0.1访问
    network_mode: service:wordpress
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

  nginx:
    image: nginx:latest
    container_name: nginx
    hostname: nginx
    restart: unless-stopped
    networks:
      - service-network
    ports: 
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf  # 挂载代理配置
    depends_on:
      - wordpress

volumes:
  wordpress: {}
  db: {}

networks:
  service-network:
    driver: bridge

Nginx代理配置文件(./nginx/nginx.conf)

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://wordpress:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

(可选)Dockerfile-nginx(若需自定义镜像)

如果不需要额外定制Nginx镜像,可直接去掉原配置中的build字段,改用挂载配置文件的方式(如上面的配置)。若确实需要构建自定义镜像,Dockerfile-nginx内容如下:

FROM nginx:latest
COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf

关键修改说明

  • 网络命名空间共享:给MySQL容器添加network_mode: service:wordpress,使其共享WordPress容器的网络栈,此时WordPress内的127.0.0.1即可访问MySQL的3306端口。
  • 数据库连接地址:将WORDPRESS_DB_HOST改为127.0.0.1:3306,符合需求要求。
  • Nginx代理配置:通过挂载配置文件,让Nginx将请求转发到WordPress容器的80端口(利用Docker内置DNS解析wordpress主机名)。

内容的提问来源于stack exchange,提问作者Ilnaz Mingazov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:07:47