node.js - 无法 Docker 将基于 nuxt 的快速服务器端口转发到主机
问题描述
我正在使用 Docker for Windows(Windows 10 是 2004 年,所以我有 WSL2)并且我正在尝试将 Nuxt 应用程序容器化。该应用程序在我的本地系统上运行良好,在创建 Dockerfile 并构建它之后,我无法将它转发到我的主机系统上。然而,当来自https://github.com/BretFisher/docker-mastery-for-nodejs/tree/master/ultimate-node-dockerfiletest
的示例应用程序尝试相同时(应该使用文件夹中的 Dockerfile ),我可以访问相同的。
如果我exec
进入我正在运行的容器,我能够在运行时获得输出,curl http://localhost:3000
所以事情应该很好。
我的 Dockerfile 看起来像
FROM node:12.18.3-buster-slim
LABEL org.opencontainers.image.authors=sayak@redacted.com
EXPOSE 3000
WORKDIR /app
RUN chown -R node:node /app
COPY --chown=node:node package*.json ./
ENV NODE_ENV=development
RUN apt-get update -qq && apt-get install -qy \
ca-certificates \
bzip2 \
curl \
libfontconfig \
--no-install-recommends
USER node
RUN npm config list
RUN npm ci \
&& npm cache clean --force
ENV PATH=/app/node_modules/.bin:$PATH
COPY --chown=node:node . .
RUN nuxt build
ENV NODE_ENV=production
CMD ["node", "server/index.js"]
我什至尝试删除所有chown
s 并删除USER node
以运行它,root
但无济于事。
这是输出到docker ps -a
d727c8dd4d5c my-container:1.2.3 "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 0.0.0.0:3000->3000/tcp inspiring_dhawan
c3a5aac8b79f sample-node-app "/tini -- node serve…" 23 minutes ago Up 23 minutes (unhealthy) 0.0.0.0:8080->8080/tcp tender_ardinghelli
sample-node-app
来自上述 GitHub 链接的链接有效,而我的链接无效my-container
。我究竟做错了什么?
编辑:我尝试在 Ubuntu VM 中构建和运行容器,但得到了相同的结果,所以它不是 WSL 或 Windows 的问题,但我的 Dockerfile 有问题。
解决方案
默认情况下,Nuxt 开发服务器主机是'localhost',但只能从主机内部访问。因此,要告诉 Nuxt 解析主机地址,主机外部的连接可以访问该地址,例如Ubuntu Windows Subsystem for Linux 2 (WSL2),您必须使用主机'0.0.0.0'
您可以通过将以下代码添加到nuxt.config.js
文件来解决此问题:
export default {
server: {
port: 3000, // default : 3000
host: '0.0.0.0' // do not put localhost (only accessible from the host machine)
},
...
}
有关更多信息,请参阅有关主机端口的 Nuxt 常见问题解答。