如何从宿主机访问Docker-in-Docker(Dind)内的Ddev站点?
解决Dind容器内Ddev TYPO3站点域名无法从宿主机访问的问题
核心问题分析
Ddev默认使用*.ddev.site自定义域名,这类域名仅在Dind容器内部通过Ddev内置DNS解析到对应站点容器;宿主机无法直接解析该域名,且单纯端口映射后直接用IP访问会触发Nginx 503错误(因为站点配置绑定了特定域名,而非IP)。
解决方案步骤
1. 配置宿主机DNS解析
在Windows系统的hosts文件(路径:C:\Windows\System32\drivers\etc\hosts)中添加以下解析规则,让宿主机将目标域名指向本地:
127.0.0.1 recruiting.ddev.site
编辑后保存(需管理员权限)。
2. 调整Dind容器端口映射与Ddev站点端口
- 进入Dind容器,查看当前Ddev站点的实际监听端口:
输出中会显示ddev describe recruitingHTTP Port和HTTPS Port(例如8036、8037)。 - 修改Dind容器启动命令,将站点端口映射到宿主机对应端口:
docker run --rm -it --privileged -v ${PWD}/project:/usr/src/project -p 80:8036 -p 443:8037 dindu - 若需固定端口,可在启动Ddev站点时指定:
ddev start recruiting --http-port=8036 --https-port=8037
3. 确认Ddev站点Nginx配置正确性
进入Ddev的web容器,检查Nginx配置中server_name是否包含目标域名:
ddev ssh recruiting cat /etc/nginx/sites-enabled/default | grep server_name
确保输出包含recruiting.ddev.site,且未绑定到特定IP(应为_或具体域名)。
4. 测试访问
完成以上配置后,直接在宿主机浏览器访问http://recruiting.ddev.site即可。若仍无法访问:
- 在Dind容器内执行
curl recruiting.ddev.site:8036确认内部访问正常; - 检查宿主机防火墙是否允许80/443端口的入站流量。
内容的提问来源于stack exchange,提问作者LukasIAO
相关产品推荐
相关产品推荐

