我终于找到了问题的解决方案。我知道有人可能会遇到和我一样的问题。
出现上述问题的主要原因有三个。
首先,如果您遇到此错误,
remote: <app name> is currently being deployed. Exiting...
To <dokku remote>:<app name>
! [remote rejected] develop -> master (pre-receive hook declined)
您可以通过在您的 dokku 主机上运行这两个命令轻松解决上述问题。
$ sudo wget -O /etc/init/docker.conf https://raw.github.com/dotcloud/docker/master/contrib/init/upstart/docker.conf
$ sudo service docker restart
其次,就我而言,全局节点模块文件夹的权限存在问题,当您尝试全局安装 @angular/cli 时会导致无限循环。不幸的是,即使在提供权限之后,pre-receive hook declined 错误也会持续存在。这是因为我使用了 @ngular/cli 映像。
错误看起来像这样
...
/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"
...
当且仅当命令$ npm config get prefix 返回类似/usr/local 的内容时,您可以通过将以下行添加到您的Dockerfile 来解决上述错误,否则您可能会弄乱您的权限。
RUN chown -R $(whoami) $(npm config get prefix)/lib/node_modules
使用此命令在您的容器中全局安装@angular/cli
RUN npm install -g --unsafe-perm @angular/cli
这是解决问题的方法。
可能导致该问题的另一个问题是将package-lock.json 添加到您的容器中。你也可以考虑忽略它,因为它可能会导致同样的问题。
因此,新的 Dockerfile 看起来像这样;
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"]
最后,如果您使用的是Vagrant dokku 安装,pre-receive hook declined 错误可能是由于虚拟机分配的内存不足。
您可以编辑您的 dokku 存储库的 Vagrantfile 并为您的虚拟机分配更多内存。例如,您可以通过在Vagrantfile 中添加以下行来将内存从 1GB 增加到 2GB;
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", 2048]
end
之后,您运行 $ vangrant reload 以应用您在 Vagrant 文件中指定的更改。
如果问题仍然存在,并且您正在使用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