programing

노드/도커를 빌드할 때 uid/gid를 가져올 수 없습니다.

copyandpastes 2023. 3. 27. 22:27
반응형

노드/도커를 빌드할 때 uid/gid를 가져올 수 없습니다.

내 Dockerfile은 alpine을 사용하여 react-script를 글로벌하게 설치하고 있습니다.설치하려고 하면 "uid/gid를 얻을 수 없습니다" 오류가 표시되며 실패합니다.npm install -g 명령어에 "---unsafe-perm" 옵션을 추가했습니다.도커 컨테이너가 성공적으로 생성되었지만 설치된 파일에 대한 컨테이너의 사용 권한이 메시지 처리되었습니다.모든 사용자 이름과 그룹이 1000으로 설정되어 있습니다.설치 절차 직전에 다음 명령을 Docker 파일에 추가하려고 했지만 도움이 되지 않았습니다.

RUN npm -g config set user root

빌드 오류

Error: could not get uid/gid
[ 'nobody', 0 ]

    at /usr/local/lib/node_modules/npm/node_modules/uid-number/uid-number.js:37:16
    at ChildProcess.exithandler (child_process.js:296:5)
    at ChildProcess.emit (events.js:182:13)
    at maybeClose (internal/child_process.js:961:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:250:5)
TypeError: Cannot read property 'get' of undefined
    at errorHandler (/usr/local/lib/node_modules/npm/lib/utils/error-handler.js:205:18)
    at /usr/local/lib/node_modules/npm/bin/npm-cli.js:76:20
    at cb (/usr/local/lib/node_modules/npm/lib/npm.js:228:22)
    at /usr/local/lib/node_modules/npm/lib/npm.js:266:24
    at /usr/local/lib/node_modules/npm/lib/config/core.js:83:7
    at Array.forEach (<anonymous>)
    at /usr/local/lib/node_modules/npm/lib/config/core.js:82:13
    at f (/usr/local/lib/node_modules/npm/node_modules/once/once.js:25:25)
    at afterExtras (/usr/local/lib/node_modules/npm/lib/config/core.js:173:20)
    at Conf.<anonymous> (/usr/local/lib/node_modules/npm/lib/config/core.js:231:22)
/usr/local/lib/node_modules/npm/lib/utils/error-handler.js:205
  if (npm.config.get('json')) {
                 ^

TypeError: Cannot read property 'get' of undefined
    at process.errorHandler (/usr/local/lib/node_modules/npm/lib/utils/error-handler.js:205:18)
    at process.emit (events.js:182:13)
    at process._fatalException (internal/bootstrap/node.js:472:27)
ERROR: Service 'sample-app' failed to build: The command '/bin/sh -c npm install react-scripts@1.1.1 -g' returned a non-zero code: 

도커 파일

/usr/src/app # cat Dockerfile
# build environment
FROM node:10-alpine as builder
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ENV PATH /usr/src/app/node_modules/.bin:$PATH
COPY package.json /usr/src/app/package.json
RUN npm install
RUN npm install react-scripts@1.1.1 -g 
COPY . /usr/src/app
RUN npm run build

# production environment
FROM nginx:1.13.9-alpine
COPY --from=builder /usr/src/app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

UPD 고정 위치

이것이 nodejs/docker-node 문제 813과 연결되어 있는지 확인합니다.

근본 원인은 다음과 같습니다.스레드 스택사이즈

의 새 스레드에 대한 기본 스택 크기glibc는 메인 스레드의 스택을 지배하는 자원 제한에 따라 결정됩니다(RLIMIT_STACK).
일반적으로는 2-10MB가 됩니다.

다음의 3가지 해결책이 있습니다.

  • 알파인 팀과 대화하여 해결하십시오.이미 몇 가지 논의가 있었다.
  • 다음과 같이 노드 도커 알파인 이미지로 수정합니다.
  • 디폴트 설정npm_config_unsafe_perm=true수정될 때까지 해결 방법으로 도커 이미지를 참조하십시오.

이미 세 번째 옵션을 시도했지만 다음 사항을 고려하십시오.

또는 알파인 팀에 의해 업스트림으로 수정될 때까지 슬림(데비안) 변종으로 전환해야 합니다.

리액트 애플리케이션을 도킹할 때 Docker에서 노드 알핀 이미지에 대해 동일한 문제가 발생하였습니다.

다음과 같은 도커 파일 구성으로 해결했습니다.

FROM node:8.10.0-alpine

# Set a working directory
WORKDIR /usr/src/app

COPY ./build/package.json .
COPY ./build/yarn.lock .

# To handle 'not get uid/gid'
RUN npm config set unsafe-perm true

# Install Node.js dependencies
RUN yarn install --production --no-progress

# Copy application files
COPY ./build .

# Install pm2
RUN npm install -g pm2 --silent


# Run the container under "node" user by default
USER node

CMD ["pm2", "start", "mypm2config.yml", "--no-daemon", "--env", "preprod"]

언급URL : https://stackoverflow.com/questions/52196518/could-not-get-uid-gid-when-building-node-docker

반응형