npm ERR!노드용 도커 이미지를 만드는 동안 트래커 "idealTree"가 이미 있습니다.
저는 simpleWeb이라는 node.js 프로젝트를 하나 만들었습니다.프로젝트에 패키지가 포함되어 있습니다.json과 index.js.
index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('How are you doing');
});
app.listen(8080, () => {
console.log('Listening on port 8080');
});
꾸러미의json
{
"dependencies": {
"express": "*"
},
"scripts": {
"start": "node index.js"
}
}
저는 제 node.js 프로젝트의 도커 이미지를 만들기 위해 도커 파일을 하나 만들었습니다.
도커파일
# Specify a base image
FROM node:alpine
# Install some dependencies
COPY ./ ./
RUN npm install
# Default command
CMD ["npm", "start"]
"docker build." 명령을 사용하여 도커 이미지를 작성하려고 하는 동안 오류가 발생합니다.
오류 로그
simpleweb » docker build . ~/Desktop/jaypal/Docker and Kubernatise/simpleweb
[+] Building 16.9s (8/8) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 37B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/node:alpine 8.7s
=> [auth] library/node:pull token for registry-1.docker.io 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 418B 0.0s
=> [1/3] FROM docker.io/library/node:alpine@sha256:5b91260f78485bfd4a1614f1afa9afd59920e4c35047ed1c2b8cde4f239dd79b 0.0s
=> CACHED [2/3] COPY ./ ./ 0.0s
=> ERROR [3/3] RUN npm install 8.0s
------
> [3/3] RUN npm install:
#8 7.958 npm ERR! Tracker "idealTree" already exists
#8 7.969
#8 7.970 npm ERR! A complete log of this run can be found in:
#8 7.970 npm ERR! **/root/.npm/_logs/2020-12-24T16_48_44_443Z-debug.log**
------
executor failed running [/bin/sh -c npm install]: exit code: 1
그 위의 로그 파일은 전체 로그를 찾을 수 있는 경로 "/root/.npm/_logs/2020-12-24T16_48_44_443Z-debug.log"를 하나 제공하고 있습니다.
그러나 위의 파일은 제 로컬 컴퓨터에 없습니다.
무엇이 문제인지 이해가 안 됩니다.
는 Node 가 하고 으로 의 의 변경으로 인해 합니다.JS 버전 15부터.WORKDIR지정되어 있습니다.npm install컨테이너의 루트 디렉터리에서 실행되므로 이 오류가 발생합니다.행 실행npm install의트에에y의에 의해 지정된 컨테이너의 프로젝트 디렉토리에서.WORKDIR문제를 해결합니다.
과 같은 합니다.Dockerfile:
# Specify a base image
FROM node:alpine
#Install some dependencies
WORKDIR /usr/app
COPY ./ /usr/app
RUN npm install
# Set up a default command
CMD [ "npm","start" ]
글로벌 설치
를 으로 하려는 에 하려는 으로 에 를 package.json, 당신은 그것을 사용해야 합니다.-g깃발을 올리다
npm install -g <pkg>
중인 가 인 과 할 가 가 할 인 가 semantic-release노드에 내장되어 있으며 작업 디렉토리 외부에 설치를 시도합니다.
정답은 기본적으로 맞지만, 막상 해보니 아직도 안 맞더라고요.그 이유는 다음과 같습니다.
WORKDIR에한를다e에 대한 합니다.COPY그 다음에 이미 컨텍스트를 지정한 경우 에서 경우 in specified context 지정한 the having already 에서 다음에 그 이미 컨텍스트를 <nat> <nat> in./usr/app복사를 요청하는 것은 잘못된 것입니다../ 작업 )에서 (으)로 이동합니다../usr/app과 같은 에:를해에과은다이다이은s를n해과에es:./usr/app/usr/app.
으로 으로.CMD ["npm", "start"], 된 과 과 )WORKDIR(./usr/app)에서 ( ) 를 찾을 수 package.json.
이 도커 파일을 사용할 것을 제안합니다.
FROM node:alpine
WORKDIR /usr/app
COPY ./ ./
RUN npm install
CMD ["npm", "start"]
모든 응용 프로그램 파일이 있는 디렉토리 내에서 npm 설치 실행을 보장하기 위해 COPY 지시 전에 WORKDIR을 지정해야 합니다.이 작업을 완료하는 방법은 다음과 같습니다.
WORKDIR /usr/app
# Install some dependencies
COPY ./ ./
RUN npm install
"COPY ./ /usr/app" 대신 "COPY ./ (현재 로컬 디렉토리) ./ (WORKDIR 지침 덕분에 현재 /usr/app인 컨테이너 디렉토리)"를 간단히 사용할 수 있습니다.
WORKDIR 명령을 사용하는 좋은 이유는 응용프로그램 파일 및 디렉토리를 컨테이너의 루트 파일 시스템과 혼합하는 것을 피하기 위해서입니다(응용프로그램 디렉토리에 유사한 디렉토리 레이블이 있는 경우 파일 시스템 디렉토리를 덮어쓰지 않기 위해서입니다).
한가지 더요.index.js를 변경할 때(따라서 이미지를 재구성해야 함) 패키지를 실행하는 동안 "npm install"을 실행할 필요가 없도록 구성을 약간 분할하는 것이 좋습니다.json은 수정되지 않았습니다.
응용 프로그램은 매우 기본적이지만, "npm 설치"에 몇 분 정도 걸리는 큰 응용 프로그램을 생각해 보십시오.
Docker의 캐싱 프로세스를 활용하기 위해 다음과 같이 구성을 분할할 수 있습니다.
WORKDIR /usr/app
# Install some dependencies
COPY ./package.json ./
RUN npm install
COPY ./ ./
이것은 도커가 패키지를 만들 때 첫 번째 카피와 런 명령을 캐시하도록 지시합니다.json은 손을 대지 않습니다.예를 들어 index.js를 변경하고 이미지를 재구축하면 도커는 이전 명령어의 캐시(첫 번째 카피와 런)를 사용하고 두 번째 카피를 실행하기 시작합니다.이렇게 하면 재구축 속도가 훨씬 빨라집니다.
이미지 재구축의 예:
=> CACHED [2/5] WORKDIR /usr/app 0.0s
=> CACHED [3/5] COPY ./package.json ./ 0.0s
=> CACHED [4/5] RUN npm install 0.0s
=> [5/5] COPY ./ ./
파티에 조금 늦었지만, 설치 프로그램에 대한 도커 파일을 만들고 싶지 않은 프로젝트의 경우, Ephemeral 컨테이너에서 설치 프로그램을 실행할 수도 있습니다.그러면 호스트 시스템에 노드 CLI를 설치할 필요 없이 노드 CLI에 전체 액세스할 수 있습니다.
명령어는 프로젝트의 루트에서 실행되고 패키지가 있다고 가정합니다.json 파일 있음. 더-v $(pwd):/appoption은 현재 작업 디렉토리를 컨테이너의 /app 폴더에 마운트하고, 설치된 파일을 호스트 디렉토리에 다시 동기화합니다.-w /appoption은 이미지의 작업 디렉토리를 /app 폴더로 설정합니다.--loglevel=verboseoption을 사용하면 install 명령의 출력이 상세해집니다.더 많은 옵션은 Node Docker 공식 hub 페이지에서 확인할 수 있습니다.
docker run --rm -v $(pwd):/app -w /app node npm install --loglevel=verbose
개인적으로 나는 Makefile을 사용하여 빌드 프로세스와는 별도로 실행하는 것이 더 빠른 여러 Ephemeral 컨테이너 명령을 저장합니다.하지만 물론, 무엇이든 가능합니다 :)
도커 파일 내부에 아래와 같이 작업 디렉토리를 지정하면 다음과 같이 작동합니다.
WORKDIR '/app'
--build in your docker-compose 명령을 사용하여 Docker 파일에서 다시 빌드해야 합니다.
docker-compose up --build
# Specify a base image
FROM node:alpine
WORKDIR /usr/app
# Install some dependencies
COPY ./package.json ./
RUN npm install
COPY ./ ./
# Default command
CMD ["npm","start"]
1. 인덱스 파일을 변경하고 도커 빌드 및 도커를 실행하면 브라우저 출력에 대한 새로운 변경 사항이 자동으로 변경됩니다.
노드 버전을 변경할 수도 있습니다.그리고 워크디르를 잊지 마세요.
FROM node:14-alpine
WORKDIR /usr/app
COPY ./ ./
RUN npm install
CMD ["npm", "start"]
Col의 답변을 바탕으로 뷰 모델에서 다음을 수행할 수도 있습니다.
public class IndexVM() {
@AfterCompose
public void doAfterCompose(@ContextParam(ContextType.COMPONENT) Component c) {
Window wizard = (Window) c;
Label label = (Label) c.getFellow("lblName");
....
}
}
이렇게 하면 실제로 레이블 개체에 액세스할 수 있으며 레이블(label)을 사용하여 모든 종류의 작업을 수행할 수 있습니다.setValue(), label.getValue() 등을 선택합니다.
위에 제시된 솔루션은 제게 효과가 없었습니다. 제 노드 이미지를 에서 변경했습니다.node:alpinenode:12.18.1그리고 그것은 성공하였다.
최신 node:alpine3.13트에하기에의을하기에다에'트t의ryrre으로 컨테이너의 루트 폴더에 복사하면 됩니다.COPY ./ ./한 채로, WORKDIR◦ 인 해결책으로는 을 추천합니다하지만 실질적인 해결책으로 다음을 추천합니다.
WORKDIR /usr/app- 프로젝트를 별도의 폴더에 넣는 것은 개발자들 사이의 관례에 의합니다.
COPY ./package.json ./- 여기 우리는 패키지만 복사합니다.npm부터 재구축을 피하기 위해 json 파일
RUN npm install
COPY ./ ./- 여기서는 모든 파일을 복사합니다(node_lot 폴더를 복사하지 않도록 루트 dir에 .deserignore 파일을 생성할 수 없습니다).
우리도 비슷한 문제가 있어서 npm을 'yarn'으로 교체했는데 잘 됐어요.여기 샘플 코드가 있습니다.
FROM python:3.7-alpine
ENV CRYPTOGRAPHY_DONT_BUILD_RUST=1
#install bash
RUN apk --update add bash zip yaml-dev
RUN apk add --update nodejs yarn build-base postgresql-dev gcc python3-
dev musl-dev libffi-dev
RUN yarn config set prefix ~/.yarn
#install serverless
RUN yarn global add serverless@2.49.0 --prefix /usr/local && \
yarn global add serverless-pseudo-parameters@2.4.0 && \
yarn global add serverless-python-requirements@4.3.0
RUN mkdir -p /code
WORKDIR /code
COPY requirements.txt .
COPY requirements-test.txt .
RUN pip install --upgrade pip
RUN pip install -r requirements-test.txt
COPY . .
CMD ["bash"]
해보세요 npm init그리고.npm install express패키지를 만듭니다.json 파일
노드 버전을 15 미만으로 지정할 수 있습니다.
# Specify a base image
FROM node:14
# Install some dependencies
COPY ./ ./
RUN npm install
# Default command
CMD ["npm", "start"]
언급URL : https://stackoverflow.com/questions/57534295/npm-err-tracker-idealtree-already-exists-while-creating-the-docker-image-for
'programing' 카테고리의 다른 글
| Node.js에서 S3 getObject의 응답을 얻는 방법은? (0) | 2023.09.11 |
|---|---|
| formGroup은 FormGroup 인스턴스를 필요로 합니다. (0) | 2023.09.11 |
| Laravel-5 데이터베이스의 선택 상자를 ID 값과 이름 값으로 채우는 방법 (0) | 2023.09.11 |
| CSS에서 최대 문자 길이 설정 (0) | 2023.09.11 |
| 링크된 서버에 대한 "IF EXISTRESS" 테스트가 있습니까? (0) | 2023.09.11 |