无法通过 Docker 将基于 nuxt 的 Express 服务器端口转发到主机

Say*_*yay 1 node.js docker dockerfile

我正在使用 Docker for Windows(Windows 10 是 2004 年的,所以我有 WSL2),并且我正在尝试容器化 Nuxt 应用程序。该应用程序在我的本地系统上运行良好,在创建 Dockerfile 并构建它之后,我无法将其转发到我的主机系统上。然而,当尝试使用来自https://github.com/BretFisher/docker-mastery-for-nodejs/tree/master/ultimate-node-dockerfile的示例应用程序时(test应该使用该文件夹中的 Dockerfile ),我可以访问相同的。

\n

如果我exec进入正在运行的容器,我能够获得运行时的输出curl http://localhost:3000,所以一切都应该很好。

\n

我的 Dockerfile 看起来像

\n
FROM node:12.18.3-buster-slim\nLABEL org.opencontainers.image.authors=sayak@redacted.com\nEXPOSE 3000\nWORKDIR /app\nRUN chown -R node:node /app\nCOPY --chown=node:node package*.json ./\nENV NODE_ENV=development\nRUN apt-get update -qq && apt-get install -qy \\\n    ca-certificates \\\n    bzip2 \\\n    curl \\\n    libfontconfig \\\n    --no-install-recommends\nUSER node\nRUN npm config list\nRUN npm ci \\\n    && npm cache clean --force\nENV PATH=/app/node_modules/.bin:$PATH\nCOPY --chown=node:node . .\nRUN nuxt build\nENV NODE_ENV=production\nCMD ["node", "server/index.js"]\n
Run Code Online (Sandbox Code Playgroud)\n

我什至尝试删除所有chowns 并删除USER node以运行它,root但无济于事。

\n

这是输出到docker ps -a

\n
d727c8dd4d5c        my-container:1.2.3   "docker-entrypoint.s\xe2\x80\xa6"   23 minutes ago      Up 23 minutes               0.0.0.0:3000->3000/tcp   inspiring_dhawan\nc3a5aac8b79f        sample-node-app      "/tini -- node serve\xe2\x80\xa6"   23 minutes ago      Up 23 minutes (unhealthy)   0.0.0.0:8080->8080/tcp   tender_ardinghelli\n
Run Code Online (Sandbox Code Playgroud)\n

sample-node-app上面的 GitHub 链接有效,而我的无效my-container。我究竟做错了什么?

\n

编辑:我尝试在 Ubuntu VM 中构建和运行容器,但得到了相同的结果,因此这不是 WSL 或 Windows 的问题,而是我的 Dockerfile 出了问题。

\n

小智 9

默认情况下,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)
      },
    ...
  }
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅有关主机端口的 Nuxt 常见问题解答