Azure Debian虚拟机部署Docker容器网站无法访问问题求助
问题:Azure虚拟机上Docker容器化网站无法访问
我在Azure虚拟机部署Docker容器化网站,操作步骤如下:
- 创建VM并开放80端口:
az group create --name my-vm-rg --location germanywestcentral az vm create --resource-group my-vm-rg --name linuxVM --image Debian --admin-username <admin_user> --admin-password <admin_password> --authentication-type password --public-ip-sku Standard --size Standard_B1ms --disable-integrity-monitoring az vm open-port --resource-group my-vm-rg --name linuxVM --port 80
- 通过Putty连接VM,安装Docker、nano并更新系统。
- 创建新文件夹及包含
<h1>Hello World</h1>的index.html文件。 - 创建Dockerfile:
FROM nginx:1.17.1-alpine LABEL maintainer="Name Surname <email>" description="Some random description" COPY . /usr/share/nginx/html
- 构建并运行容器:
docker build -t docker-test-img . docker image ls -a docker run --name my-app -d -p 8080:80 docker-test-img docker container ls -a
当前问题:Docker容器已正常运行,但本地浏览器通过<machine_ip_address>:80或<machine_ip_address>:8080均无法访问网站,提示“无法访问此网站”。
背景:正在学习相关技术,必须使用Azure虚拟机,操作系统可更换。
排查与解决方案
1. 补全Azure网络安全组(NSG)规则
你仅开放了80端口,但容器将宿主机8080端口映射到内部80端口,因此需要在NSG中添加8080端口的入站允许规则:
az vm open-port --resource-group my-vm-rg --name linuxVM --port 8080
也可登录Azure门户,找到虚拟机对应的NSG,手动添加入站规则,允许TCP协议的8080端口从指定IP(或任意IP)访问。
2. 检查虚拟机本地防火墙
Debian默认启用ufw防火墙,可能拦截了8080端口流量:
- 查看防火墙状态:
sudo ufw status - 若防火墙启用,添加8080端口允许规则:
sudo ufw allow 8080/tcp sudo ufw reload - 若无需防火墙,可直接关闭:
sudo ufw disable
3. 验证容器与宿主机端口状态
- 确认容器内服务正常:
若返回docker exec my-app curl localhost:80<h1>Hello World</h1>,说明容器内Nginx服务正常。 - 检查宿主机是否监听8080端口:
正常情况下会看到sudo netstat -tulpn | grep 8080docker-proxy进程监听0.0.0.0:8080。
4. 调整端口映射直接使用80端口(可选)
如果想直接通过80端口访问,修改容器运行命令,将宿主机80端口映射到容器80端口:
# 停止并删除现有容器 docker stop my-app docker rm my-app # 重新运行容器 docker run --name my-app -d -p 80:80 docker-test-img
此时无需额外开放8080端口,直接用<machine_ip_address>:80即可访问。
5. 确认公网IP正确性
通过以下命令获取虚拟机公网IP,确保浏览器输入的IP与结果一致:
az vm show --resource-group my-vm-rg --name linuxVM -d --query publicIps -o tsv
内容的提问来源于stack exchange,提问作者Wojciech X
相关产品推荐
相关产品推荐

