NodeJS与Docker:ENOENT:没有这样的文件或目录,打开'/app/folder/example.key'

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

我主要是想了解如何在构建NodeJS应用程序时解决/理解文件如何打包到docker容器中。我有一个具有以下目录结构的NodeJS项目:

enter image description here

docker文件内容如下:

FROM node:8.7-alpine as build
RUN npm install --global typescript webpack
ENV NODE_ENV=development NODE_PATH=/app
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN tsc -p .
RUN webpack

FROM node:8.7-alpine
ENV NODE_ENV=production NODE_PATH=/app
RUN apk add --no-cache \
    udev \
    ttf-freefont \
    chromium \
    fontconfig pango-dev libxcursor libxdamage cups-libs dbus-libs libxrandr gconf-dev libxscrnsaver libc6-compat
WORKDIR /app
COPY package.json .
RUN npm install

COPY --from=build /app/build .
CMD ["node", "."]

index.ts文件中,我有一行:

key: fs.readFileSync(path.join(__dirname, './../ssl/example.key'))

我尝试将上面的行更改为

key: fs.readFileSync(path.join(__dirname, '../ssl/example.key'))

但没有奏效。我也尝试在src文件夹中移动ssl目录,并使用下面的行仍然没有成功:

key: fs.readFileSync(path.join(__dirname, 'ssl/example.key'))

此行导致以下错误:

Error: ENOENT: no such file or directory, open '/app/ssl/example.key'
    at Object.fs.openSync (fs.js:653:18)
    at Object.fs.readFileSync (fs.js:554:33)
    at Object.<anonymous> (/app/index.js:15:13)
    at Module._compile (module.js:624:30)
    at Object.Module._extensions..js (module.js:635:10)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Function.Module.runMain (module.js:665:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3

我想这是因为应用程序目录放入docker容器时的打包方式。没有docker容器,它工作正常。有人可以帮忙吗?谢谢。

node.js docker dockerfile
1个回答
0
投票

这个问题的原因是我在docker镜像构建期间没有复制ssl文件夹。为了确保在构建过程中复制此文件夹,我需要将COPY添加到我的Dockerfile中。所以,最终的Dockerfile看起来像:

FROM node:8.7-alpine as build
RUN npm install --global typescript webpack
ENV NODE_ENV=development NODE_PATH=/app
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN tsc -p .
RUN webpack

FROM node:8.7-alpine
ENV NODE_ENV=production NODE_PATH=/app
RUN apk add --no-cache \
    udev \
    ttf-freefont \
    chromium \
    fontconfig pango-dev libxcursor libxdamage cups-libs dbus-libs libxrandr gconf-dev libxscrnsaver libc6-compat
WORKDIR /app
# This was the missing line:
COPY ssl /ssl
COPY package.json .
RUN npm install

COPY --from=build /app/build .
CMD ["node", "."]
© www.soinside.com 2019 - 2024. All rights reserved.