无法通过Google Cloud VM的外部IP访问nginx容器

时间:2020-09-23 23:30:27

标签: google-cloud-platform

我有一个在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”) enter image description here

下面是我的机器详细信息

enter image description here

这与关闭“ IP转发”有什么关系吗? (请参见上图)

2 个答案:

答案 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页面

还必须添加问题中提到的防火墙规则。