Docker:无法从浏览器访问 SvelteKit 应用程序

MrC*_*ujo 5 node.js docker dockerfile svelte sveltekit

我有一个 Svelte(带有 Sveltekit)应用程序,我刚刚对其进行了容器化。它构建正确,运行时没有错误,但我无法从浏览器访问它。我尝试访问http://localhost:5050/http://0.0.0.0:5050/但我得到:

\n
This page isn\xe2\x80\x99t working\nlocalhost didn\xe2\x80\x99t send any data.\nERR_EMPTY_RESPONSE\n
Run Code Online (Sandbox Code Playgroud)\n

这是Dockerfile我正在使用的:

\n
# Our Node base image\nFROM node:19-alpine\n\n# Set the Node environment to development to ensure all packages are installed\nENV NODE_ENV development\n\n# Change our current working directory\nWORKDIR /app\n\n# Copy over `package.json` and lock files to optimize the build process\nCOPY  package.json package-lock.json ./\n# Install Node modules\nRUN npm install\n\n# Copy over rest of the project files\nCOPY . .\n\nRUN npm run build\n\n# Expose port\nENV PORT 5050\nEXPOSE 5050\n\n# Run `yarn dev` and set the host to 0.0.0.0 so we can access the web app from outside\nCMD ["npm", "run", "dev"]\n
Run Code Online (Sandbox Code Playgroud)\n

这就是我构建它的方式:\ndocker build -t sveltekit:node --network=host .

\n

这就是我运行它的方式:\ndocker run -d -p 5050:5050 --name sveltekit-app sveltekit:node

\n

这是运行的输出docker ps

\n
a9e241b09fd3 \n\nIMAGE            \nsveltekit:node\n\nCOMMAND \n"docker-entrypoint.s\xe2\x80\xa6"                 \n\nCREATED      \nAbout a minute ago        \n\nSTATUS\nUp About a minute              \n\nPORTS          \n0.0.0.0:5050->5050/tcp          \n\nNAMES\nsveltekit-app\n
Run Code Online (Sandbox Code Playgroud)\n

我缺少什么?

\n

更新

\n

容器日志

\n
2022-11-30 19:09:18 \n2022-11-30 19:09:18 > dundermifflin-ui@0.0.1 start\n2022-11-30 19:09:18 > export PORT=8080 && node ./build\n2022-11-30 19:09:18 \n2022-11-30 19:09:18 Listening on 0.0.0.0:8080\n
Run Code Online (Sandbox Code Playgroud)\n

为什么它监听8080端口?我将我的更新package.json为:

\n

"dev": "vite dev --port=5050"

\n

这意味着我正在强制使用端口 5050,不是吗?

\n

2ph*_*pha 1

您的容器没有运行 Web 服务器来为您的文件提供服务。
由于您只想提供静态文件,节点http-server可能会这样做。

尝试在你的 dockerfile 中的某个地方运行它..
npm install --global http-server && http-server ./app -p 5050

编辑:
Sveltekit 似乎运行@sveltejs/adapter-node来提供文件。