목차
평화롭게 Docker를 사용헤오던 어느날 Docker에서 오류가 났다.
또 m1 빌드 문제이겠거니, 에러 로그를 보는데, 평소와 다른 에러 로그가 났다.
아예 node app.js
명령어를 이해하지 못하고 죽어버리는 것.
Docker file -- 수정전
FROM node:14.17-alpine
WORKDIR /
COPY package.json ./
RUN npm install
COPY ./ ./
EXPOSE 4000
CMD [ "npm", "start" ]
나는 node이미지 다운 시간을 단축시켜주는 alpine을 사용하고 있었고, 이전에 서버에 올릴때에도, 별다른 오류가 없었다.
아니, 빌드할때만 해도 오류가 없었다. 네이버 클라우드에도 올렸었다구...
오류 발생
문제는 docker run 컨테이너를 실행시키니 발생했다.
원인 파악하기
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
이 오류는 m1과 다른 빌드 --platform 이기때문에 발생가는 오류이므로 패스.
internal/modules/cjs/loader.js:1131
return process.dlopen(module, path.toNamespacedPath(filename));
Error: Error loading shared library ld-linux-x86-64.so.2: No such file or directory ...
결국 d-linux-x86-64.so.2 라이브러리가 없어서 서버(여기선 빌드된 이미지)가 이해하지 못한다는 뜻인데, 혹시나 해서 Ubutu 서버에 올려 RUN 시켜보았지만, 에러는 똑같았다. build --platform을 바꿔주어도 똑같았다. 1차적으로 떠오르는 방법을 모두 시도해보았지만, 해결이 되지 않았다... 바로 구글링
Try 1 -- node_moduels 파일 삭제 코드 추가
구글링 결과, .dockerignore
에 node_modules 코드를 빼먹어서 생긴 오류라는 블로그를 보았다. 난 추가했는데...
도커의 문제보다 node 문제일 수도 있다는 생각이 들었고, 정말 혹시 모르기때문에 Dockerfile에 다음 코드를 추가해 주었다.
RUN rm -rf node_modules/ && npm update && npm install
결과는 역시 똑같은 오류 발생... 빌드 시간만 늘어났다.
Try 2 -- nodejs 이미지 버전 바꿔보기
내가 node@14.17 버전을 사용한게 잘못일까? 도커 공식페이지에 나와있는 nodejs 공식 이미지를 여러가지 사용해 보았다.
node14-alpine
node14.16-alpine3.11
등 여러 버전으로 시도해보았지만, 실패...
Try 3-- apk 설치하기
구글을 떠돌다 이 글을 보고 조금 감이 오기 시작했다. Alpine에 어떤 설정이 있고, 이게 linux 라이브러리와 충돌이 날수 있다 어렴풋이 느껴졌고, 다시 구글 떠돌기 시작. 점점 alpine에 대한 문제점 글이 보였다.
I think there is a major difference between Alpine 3.8 and 3.10 or at least in the way Microsoft put it together.
The root cause is that the used base image openjdk:8-jre-alpine updated to from alpine 3.8 to alpine 3.9. In alpine 3.8 /lib64 is a symlink to /lib, in alpine /lib64 is a separate folder and ld-linux-x86-64.so.2 cannot be longer found in /lib. As /lib64 is not in the default search path, libc6-compat is broken which caused the here discussed snappy bug.
apk를 설치하고, linux 라이브러리를 다운그래이드 해보자. overflow 답변처럼 Dockerfile에 해당 RUN 코드를 추가해주었다.
RUN apk add --no-cache libc6-compat && ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
🔥 Try4 -- alpine 포기하기
apk를 설치하고, 파일 경로도 바꿔 보았지만, 오류가 해결되지 않았다.
결국 alpine을 포기하기로 결정. 시원섭섭하다... 분명 alpine을 사용할 수 있는 방법이 있을텐데.
Docker file -- 수정후
FROM node:14
WORKDIR /
COPY package.json ./
RUN npm install
COPY ./ ./
EXPOSE 4000
CMD [ "npm", "start" ]
오류 해결
이걸 보는 다른 사람들은 나같은 삽질을 하지 않길 바라며...
끝!
▼ 참고 글 모음
Node - Official Image | Docker Hub
Quick reference Supported tags and respective Dockerfile links 16-alpine3.11, 16.8-alpine3.11, 16.8.0-alpine3.11, alpine3.11, current-alpine3.11 16-alpine3.12, 16.8-alpine3.12, 16.8.0-alpine3.12, alpine3.12, current-alpine3.12 16-alpine, 16-alpine3.13, 16.
hub.docker.com
grpc 🚀 - C#: Running in Alpine Linux docker container fails with "Grpc.Core.Internal.UnmanagedLibrary Attempting to ... | ble
@jangolano: Given that the other solutions don't work for the SDK, I suggest you file a new issue in this repo with a minimal example - Dockerfile, C# project, Program.cs. There's a fairly minimal example here although it would be ideal to remove the googl
bleepcoder.com
main/musl libc6-compat broken for most libraries on x86_64 (#10140) · Issues · alpine / aports
With https://git.alpinelinux.org/aports/commit/main/musl/APKBUILD?id=7b32fee49798e36cb5a7dfde30183f9717472cf6 /lib64 was changed to a separate folder. Before /lib64 was a symlink to /lib. Now ld-linux-x86-64.so.2 is only created...
gitlab.alpinelinux.org
process.dlopen(module, path.toNamespacedPath(filename)) · Issue #635 · kelektiv/node.bcrypt.js
hi, version: os->10.13.3 node->v8.4.0 vscode->1.25.1;"bcrypt": "^3.0.0". if i debug in vscode: ; if I start the service with node, it works fine. I tried to change the ...
github.com
[ERROR] # Node.js - return process.dlopen(module, path.toNamespacedPath(filename));
전에 컴퓨터에서 작업하던 프로젝트들을 맥으로 새로 옮겨서 그런가잘 돌아갔던 프로젝트가 nodemon 명령으로 돌아가지 않았다...npm start도 마찬가지...그래서 열심히 구글링 해 본 결과 다양한 방
velog.io
`Error loading shared library ld-linux-x86-64.so.2` on running jar over http - docker-flink
Ask questions`Error loading shared library ld-linux-x86-64.so.2` on running jar over http Hi guys, I'm using the image tagged 1.7.2-scala_2.11-alpine however I seem to be getting shared lib issues. I'm submitting my pipelines via the http API and it's thro
gitmemory.com
'Dev > 트러블슈팅, 오류해결록' 카테고리의 다른 글
nCloud ) Load Balancer & Auto Scaling 으로 유연한 서버 관리하기 - 로드밸런서에서 생긴 오류 해결기 (0) | 2021.12.26 |
---|---|
React ) 컴포넌트 안 바뀜, 안 사라짐, 쌓임 현상 디버깅 (0) | 2021.09.30 |
React ) React 이벤트 버블링 막기 (0) | 2021.07.24 |
Docker ) 도커, 실행했는데 링크 접속이 안되는 경우! (1) | 2021.05.31 |
Node.js ) 암호화 사용, pbkdf2 익히기, 암호화 모듈화까지!! (0) | 2021.05.27 |