无法访问在 docker 中运行的服务
Posted
技术标签:
【中文标题】无法访问在 docker 中运行的服务【英文标题】:Can't access service running in 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) 【参考方案1】:试试下面的listen语句:
app.listen(PORT, '0.0.0.0');
通过阅读您提到的教程,看起来 express 正在收听 localhost
。如果您在本地运行但在容器内部,这很好,localhost
与容器外部的localhost
不同。
0.0.0.0
是unspecified IPv4 address,因此 Express 将绑定它可以找到的任何 IP,这将是您的请求从容器外部进入的 IP。
【讨论】:
是的,就是这样。使用 hapijs 而不是 Express,但解决方案相同。以上是关于无法访问在 docker 中运行的服务的主要内容,如果未能解决你的问题,请参考以下文章
应用服务中的 Docker 容器无法使用 Node SDK 访问 KeyVault
虚拟机中docker承载的微服务注册到nacos无法访问问题