You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Nginx Docker容器仅本地可访问,公网无法连接的问题求助

自定义Nginx Docker容器仅本地可访问,公网无法连接的问题求助

各位大佬好,我最近在Vultr的Ubuntu 22.10虚拟机上折腾自定义Docker镜像跑Nginx托管网站,遇到了个卡壳的问题,来请大家帮忙排查下!

环境与前置验证

  • 虚拟机是Vultr上的Ubuntu 22.10,为了排查已经关掉了iptables
  • 当我停掉Docker容器、启动本地原生Nginx服务时,公网访问mysite.com:80(这是我真实测试域名的替代名)完全正常,能加载网站内容

我的配置与操作流程

Dockerfile内容:

FROM ubuntu

RUN apt-get update

RUN apt-get install -y nginx

RUN rm /var/www/html/index.nginx-debian.html

COPY index.html /var/www/html/index.html

COPY /pictures/ /var/www/html/pictures/

COPY mysite.conf /etc/sites-enabled/mysite.conf

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

Nginx站点配置mysite.conf:

server {
    listen 80;
    server_name mysite.com;
    root /var/www/html;
}

镜像构建与容器启动命令:

docker build -t mysite_nginx .
docker run -p 80:80 -d mysite_nginx

问题现象

  • 在容器所在虚拟机上执行curl localhost,能正常拿到index.html内容,说明容器内的Nginx是正常工作的
  • 但用本地笔记本浏览器访问公网域名mysite.com时,直接报错:mysite.com refused to connect. ERR_CONNECTION_REFUSED
  • 我原本以为做了80:80的端口映射,公网访问虚拟机IP/域名就能直达容器内的网站,但现在只有主机本地能访问,公网完全连不上

我搜了不少StackOverflow上的类似问题,但大多是端口映射非80:80的情况,或者报错不是“连接被拒绝”,那些解决方案似乎都不适用我的场景。如果需要补充更多信息,大家可以告诉我要查哪些内容!

自己初步想到的排查方向(还没完全验证)

  • 检查容器内Nginx是否监听0.0.0.0:80,而不是仅127.0.0.1:可以用docker exec <容器ID> netstat -tulpn查看监听地址
  • 确认Vultr云服务商的安全组/防火墙是否开放了80端口:毕竟本地iptables关了,但云层面的防火墙可能默认拦截外部80访问
  • 查看容器日志是否有Nginx启动异常:用docker logs <容器ID>检查配置文件是否有语法错误或者路径问题
  • 尝试直接用虚拟机公网IP访问,排除域名解析的问题:比如访问http://<虚拟机公网IP>,看是否同样报错
  • 确认Docker端口映射是否绑定到0.0.0.0:在主机上执行netstat -tulpn,看80端口是否被docker-proxy监听了所有网卡地址

备注:内容来源于stack exchange,提问作者crabpeople

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:42:46