无法在 docker 中访问服务 运行

Can't access service running in docker

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

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

服务器 运行s 在端口 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 虚拟机,我可以 curl http://localhost:8000 从容器内部访问服务器。

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

不确定我接下来需要做什么。

试试下面的监听语句:

app.listen(PORT, '0.0.0.0');

从阅读你提到的教程来看,express 似乎正在监听 localhost。如果您在本地 运行 但在容器内,这很好,localhost 与在容器外的 localhost 不同。

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