2017-12-19 10 views
1

건물을 만들 때 Docker 컨테이너에 파일을 패키지하는 방법에 대한 대부분의 문제를 해결하려고합니다. NodeJS 앱.Docker가있는 NodeJS : ENOENT : 해당 파일이나 디렉토리가 없습니다. '/app/folder/example.key'를 엽니 다.

enter image description here

고정 표시기 파일 내용은 다음과 같습니다 : 나는 다음과 같은 디렉토리 구조를 가지고 NodeJS 프로젝트가

key: fs.readFileSync(path.join(__dirname, './../ssl/example.key')) 
다음 index.ts 파일에서

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", "."] 

나는 라인을 가지고

위의 행을 변경하려고 시도했습니다.

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 

나는이 방식 때문에 응용 프로그램입니다 가정 :

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

이 줄은 다음과 같은 오류가 발생합니다 : 나는 또한 src 폴더 내부의 SSL 디렉토리를 이동하고 성공하지 여전히 아래의 라인을 사용하여 시도 디렉토리는 도커 컨테이너에 넣을 때 패키지됩니다. 도커 컨테이너가 없으면 정상적으로 작동합니다. 누구든지 도와 줄 수 있습니까? 감사.

답변

0

이 문제는 Docker 이미지 빌드 중에 ssl 폴더를 복사하지 않아서 발생했습니다. 빌드 과정에서이 폴더가 복사되도록하려면 Dockerfile에 COPY을 추가해야했습니다. 따라서 최종 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", "."]