Docker WordPress容器内无法curl访问本地站点求助
问题
如何从Docker WordPress容器内部访问本地WordPress站点,例如使用curl?
从主机端,我可以在浏览器中输入站点URL正常访问。
背景
- 运行Docker容器部署本地WordPress站点
- 由三个容器(nginx、mariadb、wordpress)组成,共享同一网络
- 几乎所有功能正常,但WordPress定时任务(cron)无法运行
- 运行ccontrol插件时提示以下错误:
cURL error 6: Could not resolve host: <domain_name>
- 可能并非WordPress cron需要使用curl,但容器内无法执行
curl <domain_name>确实是问题所在,此为我要解决的核心问题
已尝试操作
- 进入WordPress容器执行
curl <domain_name>(使用实际域名),出现相同错误。原因是本地站点域名在主机/etc/hosts中映射到127.0.0.1,但容器未配置该映射 - 随后尝试了以下方法:
curl wordpress(wordpress是我的WordPress服务名称)- 在容器的
/etc/hosts中将域名映射到127.0.0.1后执行curl <domain_name> - 在容器的
/etc/hosts中将域名映射到172.20.0.3(该IP为主机执行docker inspect <wordpress-container>返回的"IPAddress": "172.20.0.3")后执行curl <domain_name>
- 以上三种方法均出现相同新错误:
curl: (7) Failed to connect to wordpress port 80 after 1 ms: Couldn't connect to server
- 例如执行
curl --ipv4 -v wordpress得到如下输出(另外两种测试输出类似,端口443情况相同):
* Host wordpress:80 was resolved. * IPv6: (none) * IPv4: 172.20.0.3 * Trying 172.20.0.3:80... * connect to 172.20.0.3 port 80 from 172.20.0.3 port 59440 failed: Connection refused * Failed to connect to wordpress port 80 after 1 ms: Couldn't connect to server * Closing connection curl: (7) Failed to connect to wordpress port 80 after 1 ms: Couldn't connect to server
- 容器内其他curl请求可正常工作,例如
curl google.com
解决方案
核心问题分析
你的WordPress容器本身不直接监听80/443端口——因为前端有Nginx容器做反向代理,所以直接访问WordPress容器的IP或服务名会被拒绝连接。同时容器内没有本地域名的hosts映射,导致域名解析失败。
具体解决步骤
方法一:让容器通过Nginx访问站点(推荐)
站点流量本来就走Nginx,直接让WordPress容器通过Nginx服务访问站点:
- 进入WordPress容器,在
/etc/hosts中添加映射:<domain_name> nginx(nginx是你的Nginx服务名称) - 执行
curl <domain_name>即可正常访问,同时WordPress cron的触发问题也会解决
方法二:持久化配置hosts映射(Docker Compose场景)
如果用Docker Compose部署,直接在配置文件中添加extra_hosts,避免手动修改容器hosts:
services: wordpress: # 其他原有配置... extra_hosts: - "<domain_name>:nginx"
重启容器后,容器内会自动生成对应的hosts条目,直接执行curl <domain_name>即可
方法三:调整WordPress容器监听配置(不推荐)
如果不想依赖Nginx,需要修改WordPress容器内的服务监听设置:
- 检查容器内的Apache/PHP-FPM配置,确保监听
0.0.0.0:80(默认可能只监听127.0.0.1,导致容器内访问被拒) - 重启WordPress容器后,执行
curl wordpress或映射域名到容器IP即可访问
额外提示
- WordPress cron无法运行的本质是无法通过域名触发
wp-cron.php,解决容器内域名访问问题后,cron功能会自动恢复 - 不要将域名映射到WordPress容器自身IP,因为容器内服务可能未对外监听端口,且静态文件、SSL等依赖Nginx处理
内容的提问来源于stack exchange,提问作者hugogogo
相关产品推荐
相关产品推荐

