我正在尝试在 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/