node.js - 带有 docker 的 Nodejs 端口无法访问

标签 node.js docker

我正在尝试在 docker 容器内运行 Node 并在外部公开端口 8585。
我只想测试暴露端口的可访问性。

现在,为了简化问题,我从这个设置中排除了 Nginx,我只是想测试 nodejs+docker 端口。

设置:

Node :

const PORT = 8585;
const HOST = '127.0.0.1';
app.listen(PORT, HOST);

Dockerfile:
FROM node:11.10.1
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY . .
RUN npm install --production --silent
EXPOSE 8585
CMD node index.js

docker -compose.yml
version: '2.1'

services:
  mws-client:
    image: mws-client
    build: .
    environment:
      NODE_ENV: production
    ports:
      - '8585'

运行 docker 镜像:
docker run -p 8585:8585 --expose 8585 1085d876c882

运行输出:
$ docker run -p 8585:8585 --expose 8585 1085d876c882
About 2 run on http://127.0.0.1:8585
Running on http://127.0.0.1:8585

网络统计输出:
$ netstat -a | grep 8585
tcp46      0      0  *.8585                 *.*                    LISTEN    

docker ps:
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
99d032ce1ad2        1085d876c882        "/bin/sh -c 'node in…"   7 minutes ago       Up 7 minutes        0.0.0.0:8585->8585/tcp   inspiring_hypatia

仍然 - 没有连接:
$ curl http://127.0.0.1:8585
curl: (52) Empty reply from server
$ curl http://127.0.0.1:80
<html><body><h1>It works!</h1></body></html>

请帮忙 - 显然我错过了一些基本的东西(相信我我用这么多的选择测试了它..)

最佳答案

问题不在于 Docker 或主机,问题在于 Node 应用程序。

你不应该绑定(bind)服务器来监听 127.0.0.1 .

更改您的代码并绑定(bind)到 0.0.0.0一切都会好起来的。

const PORT = 8585;
const HOST = '0.0.0.0';
app.listen(PORT, HOST);

你很适合测试
docker run -p 8585:8585 -it 1085d876c882


更新撰写
    ports:
      - "8585:8585" 

关于node.js - 带有 docker 的 Nodejs 端口无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57900916/

相关文章:

javascript - Sinon clock.tick 不会提前 setTimeout 的时间

node.js - Node/Q : Chaining promises sequentially

Docker 堆栈部署滚动更新卷问题

docker - 在 docker build 期间挂载 CDROM 存储库

node.js - ember/npm 插件,带有依赖项/devDependencies

javascript - node.js 限制路由,以便可以使用 jquery 加载但无法通过 url 访问

node.js - Node 服务器无法检索react axios请求头参数的值

docker - 当我尝试连接到 docker 镜像时,主机没有运行

node.js - Docker Alpine 上的 Node setuid 崩溃

opengl - OpenAI Gym的可视化如何在Docker中工作?