2017-11-29 18 views
0

현재 Dokku 인스턴스에 Angular4 응용 프로그램을 배포하는 중입니다. 그러나이 오류는 계속 발생합니다 (! [remote rejected] develop -> master (pre-receive hook declined)).Dokku 배포에서 수신 전 후크 거부 오류를 어떻게 해결합니까?

내가 마스터로 개발 지점에서 배포하고있어, 그래서 그래서 배포 명령을 실행 git push mediafactory develop:master

나는이처럼 보이는 Dockerfile를 통해 배포하고 있습니다

;

FROM node:carbon 

RUN mkdir -p /opt/app 
WORKDIR /opt/app 

COPY package*.json ./ 

RUN npm install --save @angular/[email protected] 
RUN npm install --only=production 

COPY .angular-cli.json . 
COPY . . 

RUN ng build --aot -prod 

ENV APP_ID setYourAppId 
ENV MASTER_KEY setYourMasterKey 
ENV DATABASE_URI setMongoDBURI 

EXPOSE 1337 

CMD ["npm", "start"] 

나는이 문제를 해결하지 않는 것,

sudo wget -O /etc/init/docker.conf https://raw.github.com/dotcloud/docker/master/contrib/init/upstart/docker.conf 

sudo service docker restart 

를 실행하려하지만.

답변

3

마침내 문제를 해결했습니다. 나는 누군가가 내가 가진 것처럼 똑같은 문제에 직면 할 수도 있음을 안다.

위의 문제가 발생할 수있는 주요 이유는 세 가지가 있습니다.

첫째, 당신은 당신이 쉽게 dokku 호스트에서이 두 명령을 실행하여 위의 문제를 해결할 수

remote: <app name> is currently being deployed. Exiting... 
To <dokku remote>:<app name> 
! [remote rejected] develop -> master (pre-receive hook declined) 

이 오류에 착륙합니다.

$ sudo wget -O /etc/init/docker.conf https://raw.github.com/dotcloud/docker/master/contrib/init/upstart/docker.conf 

$ sudo service docker restart 

둘째, 내 경우에, 그것은 당신이 @ 각도/CLI를 설치 전역 할 때 무한 루프에 초래 글로벌 노드 모듈 폴더의 사용 권한에 문제가 있었다. 불행히도 권한을 부여한 후에도 pre-receive hook declined 오류가 지속됩니다. 이것은 내가 사용했던 @ ngular/cli 이미지 때문이었습니다.

오류는 당신이 당신의 Dockerfile에 다음 줄을 추가하여 위의 오류를 해결할 수있는이

... 
/usr/local/lib/node_modules/@angular/cli/node_modules/node-sass/.node- 
gyp/8.9.1 
gyp WARN EACCES user "nobody" does not have permission to access the 
dev dir 
"/usr/local/lib/node_modules/@angular/cli/node_modules/node-sass/.node- 
gyp/8.9.1" 
gyp WARN EACCES attempting to reinstall using temporary dev dir 
"/usr/local/lib/node_modules/@angular/cli/node_modules/node-sass/.node-gyp" 
... 

처럼 보였다 경우에만, /usr/local 같은 명령 $ npm config get prefix 반환 무엇인가, 그렇지 않으면 당신은 엉망 귀하의 권한을 수도 .

RUN chown -R $(whoami) $(npm config get prefix)/lib/node_modules 

는이 문제를 해결 주위에 일의이 명령

RUN npm install -g --unsafe-perm @angular/cli 

당신의 용기에 세계적 @ 각도/CLI를 설치합니다.

문제가 발생할 수있는 다른 문제는 package-lock.json을 컨테이너에 추가하는 것입니다. 동일한 문제가 발생할 수 있으므로 무시해도 좋습니다. 새로운 Dockerfile은 다음과 같습니다. 당신이 Vagrant dokku 설치를 사용하는 경우

셋째 및 마지막으로
FROM node:carbon 

RUN mkdir -p /opt/app 
WORKDIR /opt/app 

RUN chown -R $(whoami) $(npm config get prefix)/lib/node_modules 

RUN npm install -g --unsafe-perm @angular/cli 

COPY package.json . 

RUN npm install --only=production 

COPY .angular-cli.json . 
COPY . . 

RUN ng build --aot -prod 

ENV APP_ID setYourAppId 
ENV MASTER_KEY setYourMasterKey 
ENV DATABASE_URI setMongoDBURI 

EXPOSE 1337 

CMD ["npm", "start"] 

은의 pre-receive hook declined 오류가 가상 머신에 낮은 메모리 할당에 의해 발생 될 수 있습니다.

dokku repo의 Vagrantfile을 편집하여 가상 컴퓨터에 더 많은 메모리를 할당 할 수 있습니다.예를 들어 Vagrantfile에 다음 줄을 추가하여 메모리를 1GB에서 2GB로 늘릴 수 있습니다.

config.vm.provider :virtualbox do |vb| 
    vb.customize ["modifyvm", :id, "--memory", 2048] 
end 

그 후, 당신은 당신이 당신의 방랑 파일에 지정된 변경 사항을 적용 할 $ vangrant reload를 실행합니다.

여전히 문제가 지속되고 mongoDB을 사용하는 경우 mongo 인스턴스를 체크 아웃하고 예상대로 실행되는지 확인하십시오. dokku 호스트에서 $ dokku mongo:list을 실행하여 mongo 인스턴스 상태를 확인할 수 있습니다.

마지막으로, 위의 해결 방법 중 어느 것도 도움이되지 않고 여전히 문제가 지속되면 독크 앱을 삭제하고 새 앱을 다시 만들어야 할 수 있습니다. 이 작업을 수행하기 전에 추가로주의하십시오!

You may checkout a tutorial I wrote about deploying 2 apps in the same docker container, with dokku