首页 > 解决方案 > 无法 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"]

我什至尝试删除所有chowns 并删除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 有问题。

标签: node.jsdockerdockerfile

解决方案


默认情况下,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 常见问题解答


推荐阅读