๋ชฉ์ฐจ
ํํ๋กญ๊ฒ 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
๊ฒฐ๊ณผ๋ ์ญ์ ๋๊ฐ์ ์ค๋ฅ ๋ฐ์... ๋น๋ ์๊ฐ๋ง ๋์ด๋ฌ๋ค.
์ฐธ๊ณ ๋ธ๋ก๊ทธ : https://velog.io/@new_wisdom/Node.js-%EC%98%A4%EB%A5%98-return-process.dlopenmodule-path.toNamespacedPathfilename
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" ]
์ค๋ฅ ํด๊ฒฐ
์ด๊ฑธ ๋ณด๋ ๋ค๋ฅธ ์ฌ๋๋ค์ ๋๊ฐ์ ์ฝ์ง์ ํ์ง ์๊ธธ ๋ฐ๋ผ๋ฉฐ...
๋!
โผ ์ฐธ๊ณ ๊ธ ๋ชจ์