【问题标题】:Cant reach node server running in docker container in vm无法访问在 vm 的 docker 容器中运行的节点服务器
【发布时间】:2017-09-25 23:50:38
【问题描述】:

我有一个 dockerized 节点应用程序在 ubuntu-vm-host 上的容器内运行,具有静态地址,但只能通过 localhost 访问它。我使用命令: sudo docker run -d -p 49160:3000 8a5ccd9f4cca 启动应用程序。当它们在没有 docker 的 vm 中运行时,我可以毫无问题地访问 vm 上正在运行的节点服务器。 当我 curl http://localhost:49160/test 我得到回应。但如果我尝试将其更改为 curl http://"correct ip address":49160/test 它不起作用。

当我在 ubuntu-vm-host 中使用 netstat -l 时,会显示转发端口。 如果我这样做:

curl  http://172.17.0.1:49160/test

这是docker0网络接口inet地址,它通过了。

netstat -l command

【问题讨论】:

  • 为什么你使用http://:49160/test,你应该总是指定一个IP地址(或域名)。
  • 这是一个错字 http://:49160/test 吗?
  • 是的,对不起,我写了 http://:49... 它忽略了括号内的所有内容
  • 错误是什么?
  • 只是客户端连接超时。服务器端没有错误或请求迹象。

标签: node.js curl docker ip


【解决方案1】:

抱歉之前的不负责任的回答。调试问题

更新

先看看app是否运行正常试试,

docker logs <container id>

如果您通常打印的所有控制台输出都在那里,

场景 1如果不是,使用 -it 标志而不是 -d 运行 docker 手动启动进程并使用 curl 检查进行调试。

docker run -it -p 49160:3000 <image id> /bin/bash

场景 2如果它正在运行,请使用以下方法检查内部 ubuntu 防火墙是否已启用,如果不需要,请禁用它。

sudo ufw status

禁用:sudo ufw disable 允许:sudo ufw allow 49160

【讨论】:

  • 情况正好相反。 Netstat -l 显示 ubuntu-vm 正在监听 49160 端口。节点应用正在其容器中监听 3000 端口。
  • 啊,没有正确阅读问题,我会更新答案。
  • 应用程序开始运行,没有任何问题。 sudo ufw status 给出:状态:不活动
  • 你能发布正在运行的 docker 的 docker 检查吗?
猜你喜欢
  • 1970-01-01
  • 2017-04-26
  • 2020-09-12
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
相关资源
最近更新 更多