시놀로지 Docker에서 Node.js 구동시 Invaild ELF header 오류

2020. 3. 21. 13:39프로그래밍 관련 일상 또는 소식

bcrypt를 사용하고 윈도우 -> 리눅스(시놀로지 Docker)로 옮기고 실행해보니 이런 오류가 난다.

Invaild ELF header

대충 원리를 찾아보니,

bcrypt는 C++ 파일들로 (bcrypt 뿐만 아니라, 일부 다른 모듈도) 구동이 된다고 한다. 따라서 빌드를 하게 되는데,

npm 같은 패키지 매니저는 빌드를 할 때 해당 OS를 따라서 빌드한다고 한다.

 

문제는 윈도우와 리눅스의 환경이 완전히 다르다 보니 이런 오류가 생기는 듯하다.

Heroku에서도 이런 케이스가 있는듯했다.


그럴 경우에는 docker node.js 이미지에 붙어있는 npm, yarn을 쓰자.

 

참고로... 컨테이너에 있는 node 파일 경로는

(공식 이미지 설명 기준) /home/node/app/~ 가 파일 경로이다.

만약 안된다면 /home/node/~ 으로 될 수도? 있다.

 

(제가 설명한 부분 중에 뭔가 잘못된 부분이 있다면 험한 말 대신 댓글에 써주시면 감사하겠습니다.)

 


시놀로지 기준 해결방법

(공식 이미지 설정 방법에 따라서 설정했고, 경로에 package.json이 있는 경우.)

 

Docker 창을 열고 컨테이너로 들어간다.

node.js 컨테이너를 킨 후, 컨테이너 내부 메뉴로 들어간 후 터미널 버튼 누르고 생성 버튼을 누른다.

 

키자마자 아마 계속 오류를 계속 내뱉고 꺼지거나 재시작될 텐데... 일단 최소한 실행이 된 상태로 유지는 되게 코드를 편집하거나, 실행 명령을 변경하자. 나는 전자를 택했다.

 

옆에 bash가 생기면 누르고 

cd /home/node/app (경로는 만들때 사용자 설정에 따라 다릅니다.)

를 입력하여 해당 파일로 이동한다.

 

그리고 node_modules 폴더를 통째로 지워버린다.

다음엔 npm install로 다시 모듈들을 설치한다.

npm install

그리고 코드나 실행명령을 다시 원상 복구하고 실행하면 잘 될 것이다.

되게 당연한 방법이지만.. 나처럼 시간을 낭비하고 싶지 않은 초보에게는.. 도움이 되려나..?

1 2 3 4 5 6 7 8 9 10 ··· 16