我有一个在8080端口上运行nginx docker容器的google cloud vm。当我使用curl http://localhost:8080
时,可从计算机内部访问nginx页面。但是,当我打开机器的外部IP(使用端口8080)时,我得到了chrome的ERR_CONNECTION_REFUSED。创建虚拟机时,我已经启用了http / https防火墙选项。
这是我使用的docker run命令以及对localhost的curl检查:
aayush_pathak15@instance-1:~/devops-environment$ sudo docker run -d -p 8080:80 nginx
f398231940eeb7194e0b4deb50936d7581cf32a451583e162cac40e829f9ebff
aayush_pathak15@instance-1:~/devops-environment$ curl http://localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
aayush_pathak15@instance-1:~/devops-environment$
这是我的VM上所有端口的列表(并且docker监听端口8080)
aayush_pathak15@instance-1:~/devops-environment$ sudo netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 583/sshd
tcp6 0 0 :::8080 :::* LISTEN 8936/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 583/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 310/dhclient
udp 0 0 127.0.0.1:323 0.0.0.0:* 402/chronyd
udp6 0 0 ::1:323 :::* 402/chronyd
我尝试添加另一条防火墙规则以允许所有端口(请忽略无关的名称“ jenkins”)
下面是我的机器详细信息
这与关闭“ IP转发”有什么关系吗? (请参见上图)
答案 0 :(得分:0)
根据Docker docs,在docker run语句中的-p 8080:80
参数告诉它将主机上的端口8080发布到容器上的端口80,因此在这种情况下,您可以通过以下方式从外部访问它在端口8080上访问节点的外部IP。34.68.171.6:8080
答案 1 :(得分:0)
我使用
运行容器sudo docker run -d -p [Internal IP]:8080:80 nginx
我可以访问http:// [外部IP]:8080
上的nginx页面还必须添加问题中提到的防火墙规则。