Docker Compose部署问题:无法访问WordPress站点
问题描述
搭建MariaDB、WordPress、Nginx关联容器时,MariaDB运行正常,WordPress数据可写入数据库,但Nginx容器启动后,通过http://localhost或域名ataboada.42.fr无法访问WordPress,无报错但连接失败。
核心问题与修复方案
1. Nginx容器未将端口映射到主机
Docker Compose中Nginx服务未配置端口映射,导致主机无法访问容器内的443端口。
修复:
在nginx服务块中添加端口映射配置:
services: # ...其他服务配置... nginx: container_name: nginx build: ./nginx restart: on-failure networks: - inception depends_on: - wordpress ports: - "80:80" # 可选,用于HTTP跳转HTTPS - "443:443" # 必须,将容器443端口映射到主机
2. WordPress容器运行的是PHP-FPM而非Web服务器
Nginx配置中代理目标为http://wordpress:9000,但9000是PHP-FPM的端口,并非HTTP服务端口。若WordPress镜像仅安装了PHP-FPM,Nginx无法通过HTTP协议直接连接。
两种修复方式:
方式一:给WordPress容器添加Web服务器
在WordPress的Dockerfile中安装Apache及PHP模块,让容器对外提供80端口的HTTP服务,再修改Nginx的proxy_pass为http://wordpress:80。方式二:Nginx直接处理PHP文件(需共享代码卷)
修改Nginx配置,直接解析WordPress的PHP文件,配置PHP-FPM的fastcgi转发:
location / { root /var/www/html; index index.php index.html; try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { root /var/www/html; fastcgi_pass wordpress:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
同时在Docker Compose的Nginx服务中添加WordPress数据卷挂载:
nginx: # ...其他配置... volumes: - wordpress_data:/var/www/html
3. 域名解析失败
配置中使用ataboada.42.fr作为server_name,但本地主机无法解析该域名。
修复:
在本地/etc/hosts文件中添加解析规则:
127.0.0.1 ataboada.42.fr
4. 自签名SSL证书被浏览器拦截
使用自签名SSL证书时,浏览器会默认阻止连接,导致显示"无法连接"。
临时测试方案:
在Nginx配置中添加80端口的server块,先通过HTTP访问验证:
server { listen 80; listen [::]:80; server_name ataboada.42.fr; # 可选:自动跳转至HTTPS return 301 https://$host$request_uri; # 或直接代理到WordPress: # location / { # proxy_pass http://wordpress:80; # proxy_set_header Host $host; # } }
测试通过后,再将自签名证书导入浏览器以信任该证书。
验证步骤
- 重启所有容器:
docker-compose down && docker-compose up -d - 检查容器状态:
docker-compose ps,确认所有容器处于Up状态 - 测试连通性:
curl -k https://ataboada.42.fr(-k参数用于忽略SSL证书验证)
内容的提问来源于stack exchange,提问作者nobody really

