Ubuntu下运行Nginx Dockerfile后本地8080端口连接被拒问题求助
问题排查与解决方案
1. Nginx仅监听IPv6端口,未兼容IPv4请求
容器启动日志显示执行了10-listen-on-ipv6-by-default.sh脚本,该脚本会修改Nginx默认配置,仅监听IPv6的80端口,此时请求IPv4地址的localhost(默认解析为127.0.0.1)会被拒绝。
- 验证方式:进入容器查看监听状态
如果输出仅包含docker exec -it hue-a1_container netstat -tunlp | grep nginx:::80、无0.0.0.0:80,即可确认该问题。 - 解决方法:
- 临时验证:直接请求IPv6本地地址
curl http://[::1]:8080/Hello-World.txt - 永久修复:新增Nginx配置文件同时监听双栈
本地新建default.conf文件,内容如下:
修改Dockerfile替换默认配置:server { listen 80; listen [::]:80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } }
重新构建镜像启动容器即可。FROM nginx:1.19 COPY Hello-World.txt /usr/share/nginx/html COPY default.conf /etc/nginx/conf.d/default.conf
- 临时验证:直接请求IPv6本地地址
2. 本地8080端口被其他进程占用
- 验证方式:执行命令查看端口占用
有输出即说明端口被占用。sudo lsof -i :8080 # 或 sudo netstat -tunlp | grep 8080 - 解决方法:停止占用端口的进程,或启动容器时更换映射端口:
后续访问docker run -it --rm -p 8081:80 --name hue-a1_container hue-a1http://localhost:8081/Hello-World.txt即可。
3. 系统ufw防火墙拦截8080端口
Ubuntu默认开启ufw防火墙,未手动放行的端口会被拦截。
- 验证方式:查看防火墙规则
若8080端口不在允许列表中即可确认。sudo ufw status - 解决方法:放行8080端口
sudo ufw allow 8080/tcp
4. Docker为snap安装版本,默认限制端口映射
Ubuntu 21.04软件源默认提供的snap版Docker存在端口映射权限限制。
- 验证方式:查看Docker安装来源
有输出即为snap版本。snap list | grep docker - 解决方法:卸载snap版Docker,安装官方apt源版本的Docker即可。
5. 终端配置了代理导致localhost请求被转发
如果终端配置了全局代理,localhost请求会被转发到代理节点,导致访问失败。
- 验证方式:查看代理配置
有输出即为存在代理配置。echo $http_proxy $https_proxy - 解决方法:临时取消代理后再请求
unset http_proxy https_proxy curl http://localhost:8080/Hello-World.txt
内容的提问来源于stack exchange,提问作者xDrago
相关产品推荐
相关产品推荐

