我主要是试图了解如何在构建NodeJS应用程序时解决/理解文件如何打包到docker容器中。我有一个具有以下目录结构的NodeJS项目:
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容器,它工作正常。有人可以帮忙吗?感谢。
答案 0 :(得分: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", "."]