用docker切换用户导致wercker出错,如何安装nvm呢?

问题

我的wercker生成退出Failed step: setup environment - Command exited with exit code: 1当我在我的Docker图像切换用户。 我wercker dev运行wercker dev 。 Dockerfile和Docker本身在命令行上以及在Docker Hub上都可以正常工作。 我可以很好地运行。 只是当我用它为wercker,发生错误。

例如在我的Dockerfile中是下面的代码:

 # Adding user RUN adduser --disabled-password --gecos '' dockworker && adduser dockworker sudo && echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers RUN mkdir -p /home/dockworker && chown -R dockworker:dockworker /home/dockworker USER dockworker # Line the build seems to break on 

当我评论这条线时,似乎通过了。 现在对于我来说,这个问题如下:我想切换到另一个用户,因为我正在尝试安装nvm (for nvmbower )。 一般来说,我不喜欢以root身份来安装这个,因此我为此添加了一个用户。

解决方法?

但是,当我在我的nvm以root身份安装nvm (所以只需在上面的代码块中完全删除用户相关的行):

 ENV NODE_VERSION 0.12.7 ENV NVM_DIR /usr/local/nvm # NVM RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | NVM_DIR=/usr/local/nvm bash #install the specified node version and set it as the default one, install the global npm packages RUN . /usr/local/nvm/nvm.sh && nvm install $NODE_VERSION && nvm alias default $NODE_VERSION && npm install -g bower && npm install -g gulp 

然后它通过setup environment阶段,但在这个步骤中,它错误地nvmnpmwercker.yml的步骤:

 box: id: francobolli/docker-ubuntu-14.04-php-5.6 tag: latest env: NVM_DIR: /usr/local/nvm dev: steps: - script: name: gulp styles and javascript code: | npm install bower install --allow-root gulp --env=production 

我真的不明白这一点。 当我从命令行运行两个docker镜像时(所以wercker完全从上下文中移除),我可以执行nvmnpm ,但是当我通过wercker运行它时, 看起来 .bashrc文件没有被执行。 当我在cat ~/.bashrc的步骤中,我可以看到:

 export NVM_DIR="/usr/local/nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm 

解决方法!

当我在一个步骤中input时,它会被执行,我可以npm install没有问题,所以它似乎永远不会通过.bashrc执行:

 ... - script: name: gulp styles and javascript code: | [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # It works when I put it here, but it's also in ~/.bashrc, which doesn't seem to get executed npm install ... 

注意:如果我在wercker步骤中inputsource ~/.bashrc ,它不起作用。

所以我的问题是:我做错了什么,因为不能在Wercker构build中切换用户,即使可以,我也会遇到与以root运行nvm相同的问题:在Docker容器中可以findnvm和npm从命令行实例化,但在与Wercker一起运行时无法find。 什么是最好的解决scheme?

如果可以通过正确的用户configuration或适当的nvmconfiguration解决,我宁可不要在wercker.yml添加命令。 对不起,如果我失去了非常明显的东西。

这与Dockerconfiguration无关,而是与Wercker如何处理Docker框。 从文档:

使用Sudo

wercker v2中不再支持sudo命令,使用时无效。

对于部署:

请注意,如果您更新项目以使用Docker(Ewok版本)并且此项目具有自动部署,则此部署很可能会失败。 我们将在未来更新我们的文档,介绍如何部署这些容器。

但是,我确实得到它与原始问题中显示的解决scheme(临时解决方法?)构build(和部署)。