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

时间:2015-07-25 10:38:19

标签: docker wercker

问题

当我在Docker镜像中切换用户时,我的wercker构建以Failed step: setup environment - Command exited with exit code: 1退出。我从命令行运行wercker dev。 Dockerfile在命令行以及Docker Hub上使用Docker本身构建得很好。我可以运行得很好。只是当我将它用于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(对于gulp,{{1 }})。一般情况下,我不喜欢以root身份安装它,因此我为此添加了一个用户。

解决方法吗

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

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 environmentnvmnpm中的步骤:

wercker.yml

我真的不明白这一点。当我从命令行运行两个docker镜像时(所以wercker完全从上下文中删除)我可以执行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 nvm就好了,但是当我通过wercker运行它时,它< em>似乎 npm文件未被执行。当我在步骤中.bashrc时,我可以看到:

cat ~/.bashrc

解决方法!

当我在一个步骤中输入它时,它将被执行,我可以export NVM_DIR="/usr/local/nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm 没有问题,所以它似乎永远不会通过npm install执行:

.bashrc

注意:如果我在wercker步骤中使用... - 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构建中切换用户,即使我可以,我也会遇到与运行nvm root相同的问题:nvm和npm可以找到从命令行实例化Docker容器,但在使用Wercker运行时可以找到CAN&#t; T。什么是最好的解决方案?

如果可以通过正确的用户配置或正确的nvm配置解决,我宁愿不在source ~/.bashrc中添加命令。对不起,如果我遗漏了一些非常明显的东西。

1 个答案:

答案 0 :(得分:1)

这与Docker配置无关,但与Wercker如何处理Docker框无关。来自文档:

  

使用Sudo

     

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

部署:

  

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

但是,我确实使用原始问题中显示的解决方案(临时解决方法?)来构建(和部署)。