无法通过浏览器访问 docker 中的 Node.js 应用程序 运行

Can't access Node.js app running in docker through browser

我正尝试在 docker 上 运行 一个 Node.js 应用程序。我正在使用 WSL 并已成功 运行 docker 上的应用程序。现在的问题是,当我尝试在浏览器上访问该应用程序时,它显示为无响应。我无法在浏览器中访问它。我在 docker 上还有另一个 Reactjs 应用程序 运行ning,我可以通过浏览器访问该应用程序。我究竟做错了什么?为什么无法在 windows 浏览器中访问 Nodejs 应用程序?下面是 Node.js

的 Dockerfile
# pull official base image
FROM node:12.18.3-alpine

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent

# add app
COPY . ./


# start app
CMD ["npm", "run", "dev"]

下面是用于运行在docker

中设置应用程序图像的命令
docker build -t gdns/node-app .

winpty docker run \
    -it \
    --rm \
    -v ${PWD}:/app \
    -v /app/node_modules \
    -p 4000:4000 \
    -e CHOKIDAR_USEPOLLING=true \
    gdns/node-app

Node.js应用是运行ning,我可以查看如下日志

请帮忙

好的。你是 wsl 中的 运行 一个 docker。 WSL 是 windows os 之上的一个虚拟盒子。所以它有自己的网络适配器。所以请通过“ifconfig”命令找到wsl的IP。它会告诉你wsl的IP。

然后您可以从您的浏览器连接该IP

http://wsl-ip:4000

您必须 expose 容器内的 nodejs 端口。你只是打开容器的主机端口 4000 但容器没有打开端口 4000,为此你必须更改你的 Dockerfile

已更改 Dockerfile

# pull official base image
FROM node:12.18.3-alpine

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent

# add app
COPY . ./

EXPOSE 4000

# start app
CMD ["npm", "run", "dev"]

我已经更改了 Node.js 应用中的代码以监听“0.0.0.0”。

const hostname = '0.0.0.0';
const port = 4000;
server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});