【发布时间】: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 容器的命令。如果您使用其他方法,请在您的问题中明确说明。
标签: node.js docker google-cloud-platform