谷歌云防火墙暴露端口 Docker

Posted

技术标签:

【中文标题】谷歌云防火墙暴露端口 Docker【英文标题】:Google Cloud Firewall Exposing Port Docker 【发布时间】:2022-01-20 19:29:59 【问题描述】:

我成功地将 docker 映像部署到 VM 实例。如何向它发送网络请求?

代码是一个简单的 Node.js / express 应用程序,它只是 res.json()“你好!”在根路径上。它正在监听 3000 端口。

我认为部署过程是这样的:

    从 Node.js / express src 构建 Docker 映像。 在本地命令行运行容器,正确暴露端口。它在本地工作。 使用正确的项目 ID/区域标记图像。 推送到 VM。 我认为我推送的是图像,而不是容器。这是个问题吗? SSH 进入虚拟机。运行 docker ps 并查看正在运行的具有正确图像标签的容器 使用命令行curl(我使用zsh终端)以及浏览器来检查网络请求。获取connection refused error

作为初学者,谷歌防火墙设置似乎是开放的——我已允许所有端口的入口。

我也想在某个时候允许出口,但现在我的问题是,每当我尝试使用我的网络浏览器或命令行中的curl 联系 IP 地址时,我都会得到一个connection refused error .

看来问题很可能出在防火墙上,我已经确认我的 docker 容器正在 VM 中运行(源代码在我的机器上运行)。

编辑:

使用端口 3000 入口更新了防火墙规则:

【问题讨论】:

使用 1) 运行容器的命令行编辑您的问题。 2) 在为端口 3000 创建 VPC 防火墙 ingress 规则后更新屏幕截图。cloud.google.com/vpc/docs/using-firewalls 3) 您在哪个操作系统上运行 Docker?检查 UFW 防火墙是否处于活动状态 sudo ufw status。 4) 注意:谷歌有两种计算引擎。一个是为容器设计的 - Google Compute Engine Container-Optimized OS cloud.google.com/container-optimized-os/docs/concepts/… 请注意您的问题。 一个附加项目。对于 Docker,您必须在运行容器时公开 TCP 端口。这就是为什么您的问题需要包含在内的原因。 虚拟机的命令行还是我的本地命令行? 我记得在本地命令行上构建容器以进行测试时暴露了端口,但我想我docker pushed 仅图像。我通过 SSH 连接到 VM 并且正确的映像作为容器运行……问题是当我的 VM 将推送的映像构建到容器中时它没有公开任何端口?我怎么知道是这个还是防火墙? 您在计算引擎 SSH 会话中用于启动 Docker 容器的命令。如果您使用其他方法,请在您的问题中明确说明。 【参考方案1】:

您需要一个允许到tcp:3000 的流量的防火墙规则。

最好只使用您主机的 IP(谷歌“我的 IP 是什么?”并使用它),但现在您可以(暂时)使用任何 IP 0.0.0.0/0

防火墙规则也只能应用于运行容器的虚拟机,但我一开始并不担心。

【讨论】:

以上是关于谷歌云防火墙暴露端口 Docker的主要内容,如果未能解决你的问题,请参考以下文章

为互联网打开端口 5000 不适用于谷歌云计算引擎实例

在 ubuntu 谷歌云平台上安装 RethinkDb

谷歌云防火墙是不是默认阻止子网间流量?

谷歌云健康检查失败

谷歌云配置FTP主动模式,使用宝塔的FTP储存空间插件实现自动备份数据

docker远程连接失败,2375端口也是放开了的