如何通过本地域名远程访问部署在RaspberryPi上的Docker化WordPress应用
解决局域网内通过
dev.nemoz.info访问树莓派WordPress的问题 先梳理下你的核心矛盾点:
- 树莓派(
192.168.1.10)上的WordPress通过Docker映射到8084端口,WP地址和站点地址都设为http://dev.nemoz.info - 局域网Ubuntu机器访问该域名时被拒绝,tcpdump显示请求打到了树莓派的
80端口(但树莓派这个端口没有服务,所以返回RST包) - 你在Ubuntu上配置了Nginx反向代理,却把
dev.nemoz.info的hosts指向本地127.0.0.1,这直接导致了解析和代理逻辑的混乱
下面是分步解决方法:
1. 修正Ubuntu的hosts解析规则
你的Ubuntu机器需要明确知道dev.nemoz.info对应的是树莓派的IP,而不是本地。编辑hosts文件:
sudo nano /etc/hosts
把错误的行:
127.0.0.1 dev.nemoz.info
替换为:
192.168.1.10 dev.nemoz.info
保存后刷新DNS缓存:
# 针对systemd架构的Ubuntu sudo systemctl restart systemd-resolved # 老版本Ubuntu可使用 sudo dscacheutil -flushcache
2. 调整Nginx反向代理的部署位置(关键优化)
你现在把Nginx装在了Ubuntu机器上,这种方式只能让这台Ubuntu访问,其他局域网设备需要单独配置hosts指向这台Ubuntu,扩展性很差。更合理的做法是把Nginx部署在树莓派上,让所有局域网设备直接解析到树莓派IP,由树莓派的Nginx把80端口请求转发给Docker的8084端口。
树莓派上部署Nginx的步骤:
- 安装Nginx:
sudo apt update && sudo apt install nginx -y
- 创建反向代理配置文件:
sudo nano /etc/nginx/sites-available/devnemoz.conf
写入以下配置:
server { listen 80; server_name dev.nemoz.info; location / { proxy_pass http://localhost:8084; 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; } }
- 启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/devnemoz.conf /etc/nginx/sites-enabled/ sudo nginx -t # 检查配置语法是否正确 sudo systemctl restart nginx
3. 强制WordPress使用正确的站点地址
虽然你已经在WP后台设置了不带端口的地址,但Docker环境下可能存在缓存或反向代理的适配问题,导致WP偶尔跳转到8084端口。可以直接修改容器内的wp-config.php来强制生效:
# 进入WordPress容器 docker exec -it nemoz-dev_wordpress-dev_1 bash # 编辑配置文件 nano wp-config.php
添加以下代码段:
define('WP_HOME', 'http://dev.nemoz.info'); define('WP_SITEURL', 'http://dev.nemoz.info'); define('FORCE_SSL_ADMIN', false); // 如果未配置HTTPS请保留这行
保存后退出容器即可。
4. 验证配置结果
在Ubuntu机器上执行以下命令验证:
- 确认解析正确:
ping dev.nemoz.info
- 测试网站连通性:
curl -v http://dev.nemoz.info
如果返回正常的WordPress页面HTML内容,说明配置成功,此时Chrome浏览器访问http://dev.nemoz.info也能正常打开了。
内容的提问来源于stack exchange,提问作者nagard




