Docker部署带SSL的Nginx服务无法通过域名访问如何解决
问题排查与修复方案
核心问题点
- 端口映射配置错误:你执行的
docker run命令中仅指定-p 443,会将容器的443端口随机映射到宿主机的高位端口,且未映射80端口,访问域名时默认请求80/443标准端口自然无法连通。同时你访问公网IP显示Nginx默认页,说明宿主机本身运行了Nginx服务,已经占用了80/443端口,容器的端口根本无法绑定到标准端口上。 - 域名解析未配置/配置错误:未确认
example.com是否已经正确解析到服务器公网IP,解析错误会直接导致请求无法到达你的服务器。 - 端口未放行:云服务器安全组、宿主机防火墙如果未放开80、443端口的入站规则,请求会被直接拦截,表现为连接超时。
- Nginx匹配规则问题:你的Nginx配置中
server_name明确指定为example.com,直接访问IP时无法匹配该服务块,会走默认的Nginx欢迎页逻辑。
修复步骤
- 先停止并禁用宿主机自带的Nginx服务,避免端口冲突:
sudo systemctl stop nginx sudo systemctl disable nginx
- 重新启动容器,正确映射80、443端口:
sudo docker run -v /etc/letsencrypt/:/etc/letsencrypt/:ro -d -p 80:80 -p 443:443 app
- 验证域名解析规则,本地执行
ping example.com确认返回的IP地址和你的服务器公网IP一致。 - 检查云服务商后台的安全组规则,放行80、443端口的TCP入站请求;同时确认宿主机内部防火墙(firewalld/ufw)也放开了对应端口。
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

