如何创建符合要求的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
相关产品推荐
相关产品推荐

