2016-08-07 3 views
1

Docker 이미지에 nvm을 설치하려고합니다. 원래이 Docker 이미지가 Ubuntu에서 만들어 졌다고 생각했지만 실제로 데비안에서 빌드되었습니다. 나는 NVM 컬, 이후 노드를 설치하는 떠들썩한 파티를 설치하고,하지만 난 bad substitution 오류 얻을 :잘못된 대체 오류 Debian 기반 도커 이미지 내 NVM 설치

여기

내 Dockerfile의를 :

FROM docker 

RUN apk add --update bash \ 
    && touch /root/.bashrc \ 
    && curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh | bash \ 
    && source /root/.bashrc \ 
    && nvm install node \ 
    && npm install 

나는 다음과 같은 오류가 라인과 관련이있다 생각 && source /root/.bashrc \

=> Downloading nvm as script to '/root/.nvm' 

0 
=> Appending source string to /root/.bashrc 
=> Close and reopen your terminal to start using nvm 
/bin/sh: /root/.nvm/nvm.sh: line 107: syntax error: bad substitution 
ERROR: Service 'docker' failed to build: The command '/bin/sh -c apk add --update bash && touch /root/.bashrc && curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh | bash && source /root/.bashrc && nvm install node && npm install' returned a non-zero code: 2 

이 잘못된 대체 오류의 원인은 무엇입니까? 데비안 기반 Docker 이미지에 nvm을 설치하는 더 간단한 방법이 있습니까? 어떤 도움을 주셔서 감사합니다.

+0

첫 번째 단계는 /root/.nvm/nvm.sh의 107 행을 보는 것입니다. – BMitch

답변

1

도커 이미지가 알파인 리눅스에서 기반으로 다음은 데비안 기반 이미지 내 Dockerfile 항목 (APPUSER는 컨테이너가 일반적으로 따라서 도커 그룹 추가를 실행하는 것이 다른 곳에서 추가 된 사용자입니다)입니다. 알파인 리눅스는 기본 쉘을 sh으로 사용합니다. 이 오류는 shbash 비 호환성 때문에 발생합니다.

불행하게도, NVM 홈 페이지는 알파인 리눅스에 대한 지침,하지만 매우 실망이 있습니다 nvm on Alpine Linux

을 일부 변경 한 후, nvm work with Alpine을 만들어 최종 버전 :

FROM docker 
RUN apk add --update bash coreutils ncurses tar gzip nodejs \ 
    && touch ~/.bashrc \ 
    && curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh | sh \ 
    && LINE=$(cat /root/.nvm/nvm.sh | grep -in '{BASH_SOURCE\[0\]}' | awk -F: '{print $1}') \ 
    && sed -i "${LINE}s/BASH_SOURCE\[0\]\}/BASH_SOURCE\}\$\{0\}/" /root/.nvm/nvm.sh \ 
    && source ~/.bashrc \ 
    && nvm ls \ 
    && nvm install node \ 
    && nvm use --delete-prefix v6.3.1 \ 
    && npm install 

약간의 불편 존재, 당신이 그것을 사용해야 할 때마다 nvm use --delete-prefix v6.3.1을 사용할 필요가 있습니다.

나는 또한 @ BMitch의 업데이트 된 답변을 시도하는 것이 좋습니다.

0

FROM docker "Docker in Docker"알파인 이미지의 이미지를 기반으로합니다. Docker를 Docker에 필요로하는 특별한 사용 사례가 없다면, 이것은 아마도 원하는 기본 이미지가 아닙니다.

노드 이미지가 필요한 경우 premade node image을 사용해보십시오. 이것은 데비안 jessie를 기반으로합니다.

노드 기반으로 Debian 또는 Ubuntu의 다른 버전을 설치해야하는 경우 해당 이미지의 여러 버전 중에서 선택할 수 있습니다. FROM debian:jessie.


편집 : Docker를 다른 이미지에 쉽게 추가 할 수 있습니다.

ARG DOCKER_GID=999 
USER root 
RUN curl -sSL https://get.docker.com/ | sh 
RUN groupmod -g ${DOCKER_GID} docker && \ 
    usermod -aG docker appuser 
+0

나는 Docker에서 실제로 Docker를 원한다고 생각한다. 궁극적으로 CL에서 docker 명령을 실행하여 다른 이미지를 기반으로 컨테이너를 만들어야합니다. – Trevor

+0

다른 데비안 기반 이미지에 도커를 추가하는 단계로 답변을 업데이트했습니다. 그것은 당신이 겪고있는 알파인 문제를 피할 것입니다. – BMitch