인프런 커뮤니티 질문&답변

pm1100tm님의 프로필 이미지

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

NestJS Dockerizing Error loading shared library bcypt 에러

작성

·

7.9K

0

강의의 내용와 조금 동떨어진 질문일 수 있지만 글 올려 봅니다. 무관하시다 생각하시면 답변 달아주지 않으셔도 좋습니다.

auth 기능을 로컬에서 구현 후, dockerizing 하는 부분에서

Error: Error loading shared library /gateway/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node: Exec format error

와 같은 에러가 나서 구동되지 않습니다. Dockerfile 은

FROM node:12-alpine

RUN apk update && apk add --no-cache curl vim bash

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

 

이고, bcrypt 는

npm i bcrypt

npm i -D @types/bcrypt

로 하여 설치하였습니다.

 

container 안에서 

npm i bcrypt

npm i -D @types/bcrypt

명령어를 이용해서 bcrypt 를 다시 설치하면,

정상적으로 구동됩니다.

 

 

 

 

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네 alpine에서 bcrypt가 설치 안 될 수 있습니다. native module 사용하는데 거기에 필요한 디펜던시들이 alpine에서 없을 수 있어서요. 저는 그럴 때 그냥 node에서 빌드하고 multistage-build 사용해서 node:alpine으로 빌드 결과물만 복사해옵니다.

pm1100tm님의 프로필 이미지
pm1100tm
질문자

답변 감사드립니다.

어쩔 땐 되고 어쩔 땐 안되는 이유가 있었나 보네요..

방금 같은 에러가 나서 docker exec 로 bcrypt 를 수동으로 설치를 한 번 더 해주니, 잘 구동이 되네요.

Docker 에 조예가 없어, 답변해주신 내용이 완벽히 이해가 가지 않지만,

alpine 이미지를 사용할 때는 node_modules 과 dist 까지 복사해서 가져간다고 이해해도 될까요.

 

alpine 을 선택한건 최대한 경량의 컨테이너를 띄우고 싶어였는데, 다른 이미지로 테스를 한 번 해봐야겠네요. 

감사합니다.

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네 복사해서 가져가시면 됩니다. npm prune 명령어도 빌드 후 한 번 입력해주는게 노드모듈즈폴더 경량화에 도움이 됩니다.

pm1100tm님의 프로필 이미지
pm1100tm
질문자

답변이 너무 빠르신데요,, 감사합니다. 도움 많이 됐습니다.

pm1100tm님의 프로필 이미지

작성한 질문수

질문하기