Node Express.js 应用程序在本地运行良好,但在 Docker 中显示“无法获取/”

问题描述 投票:0回答:1

我在 Node 应用程序中定义了一个 Express.js 服务器,如下所示:

const express = require('express')
const SignRequest = require('./SignRequest/lambda/index.js')
const VerifyResponse = require('./VerifyResponse/lambda/index.js')

const port = "3000";

const app = express();
app.set('port', port)
app.use(express.static('../../web/dist'))
app.post('/signrequest', SignRequest.handler)
app.post('/verifyresponse', VerifyResponse.handler)
 
app.listen(port, () => console.log(`Listening on port ${port}`))

如果我通过

node api/src/server.js
在 IDE(VS Code)本地运行该应用程序,则该应用程序可以正常工作。

当我将其构建到 Docker 时,如下所示:

docker build --no-cache -t sdk-tester .

然后运行如下:

docker run -p 3000:3000 app-name

图像/容器已正确构建并正在运行,没有任何错误。

但是当我尝试在 Docker 之外访问它时(即通过 http://localhost:3000/ 在本地计算机的浏览器上),我收到此错误:

Cannot GET /

这是我的 Dockerfile:

FROM node:16 AS development

ARG NODE_ENV=development
ENV NODE_ENV $NODE_ENV

WORKDIR /code/demo

COPY package.json /code/demo/package.json
COPY package-lock.json /code/demo/package-lock.json
RUN npm install

COPY . /code/demo

RUN update-ca-certificates
RUN export NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/swbc-certificate.crt

CMD [ "node", "api/src/server.js" ]

EXPOSE 3000

我已验证我的所有文件(包括 API 中的

server.js
app.use()
引用的 Web 文件确实已成功复制到容器中:

API:

网页:

那么,为什么会出现错误呢?和我在

app.use(express.static('../../web/dist'))
中指定的路径有关系吗?如果是这样,为什么该路径在本地有效,但在 Docker 中却无效?

javascript node.js docker express
1个回答
0
投票

好吧......看来问题出在我如何在

express.static()
中构建/传递静态文件的路径。如下修改我的
server.js
解决了这个问题。

之前:

app.use(express.static('../../web/dist'))

之后:

const path = require('path')
app.use('/', express.static(path.join(__dirname, '../../web/dist')))
© www.soinside.com 2019 - 2024. All rights reserved.