【问题标题】:Can't access service running in docker无法访问在 docker 中运行的服务
【发布时间】:2017-10-19 01:09:10
【问题描述】:

我无法通过在 docker 映像中运行的 http://localhost:8000 访问基于 nodejs 的服务。我正在使用 Docker for Mac (https://docs.docker.com/docker-for-mac/)

我正在关注这里的教程https://nodejs.org/en/docs/guides/nodejs-docker-webapp/

服务器在 8000 端口上运行。我使用以下命令启动 docker 映像:

$ docker run -p 8000:8000 -d geuis/node-server:latest

如果我运行 docker ps 我会看到:

CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS                    NAMES
9fa2e446918b        geuis/node-server:latest   "npm start"         6 seconds ago       Up 5 seconds        0.0.0.0:8000->8000/tcp   unruffled_lewin

如果我 docker exec -it 9fa2e446918b /bin/bash 可以访问 docker vm,我可以 curl http://localhost:8000 并从容器内部访问服务器。

但是,我从系统终端尝试相同的curl http://localhost:8000,但它无法访问。

不知道接下来我需要做什么。

【问题讨论】:

  • 我用 docker for mac 试了一下,效果很好。除了端口还有其他修改吗?
  • 你可以使用默认的 Docker IP 访问服务吗,即192.168.99.100:8000? (或任何其他 IP,如果您指定了默认值以外的 IP)

标签: docker localhost docker-for-mac


【解决方案1】:

试试下面的listen语句:

app.listen(PORT, '0.0.0.0');

通过阅读您提到的教程,看起来 express 正在收听 localhost。如果您在本地运行但在容器内部,这很好,localhost 与容器外部的localhost 不同。

0.0.0.0unspecified IPv4 address,因此 Express 将绑定它可以找到的任何 IP,这将是您的请求从容器外部进入的 IP。

【讨论】:

  • 是的,就是这样。使用 hapijs 而不是 Express,但解决方案相同。
猜你喜欢
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 2020-05-02
相关资源
最近更新 更多