wercker with docker switching user 结果出错,那怎么安装nvm呢?

wercker with docker switching user results in error, how to install nvm then?

问题

当我在 Docker 图像中切换用户时,我的 wercker 构建以 Failed step: setup environment - Command exited with exit code: 1 退出。我从命令行 运行ning wercker dev。 Docker 文件在命令行以及 Docker Hub 上使用 Docker 本身构建良好。我可以 运行 没问题。只是当我用它来做wercker时,就出现了这个错误。

例如在我的Docker文件中是以下代码:

# 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

当我把这行注释掉的时候,好像就pass了。现在,对我来说,问题如下:我想切换到另一个用户,因为我正在尝试安装 nvm(对于 gulpbower)。通常我不喜欢以 root 身份安装它,因此我为此添加了一个用户。

解决方法?

但是,当我在我的 Docker 文件中以 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 阶段,但是在这些步骤中它出错了 nvmnpm 没有找到。 wercker.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

解决方法!

当我在一个步骤中输入这个时,它会被执行,我可以 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 步骤中 source ~/.bashrc 代替,它不起作用。

问题

所以我的问题是:我做错了什么,因为无法在 Wercker 构建中切换用户,即使我可以,我是否会遇到与 运行ning nvm with root 相同的问题:当从命令行实例化 Docker 容器时,可以找到 nvm 和 npm,但当使用 Wercker 运行 将其连接时,则找不到。什么是最好的解决方案?

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

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

Using Sudo

The sudo command is no longer supported in wercker v2 and effectively does nothing when used.

对于部署:

Please note that if you update a project to make use of Docker (Ewok version) and this project has autodeployment, this deploy will most likely fail. We will update our documentation in the future on how to deploy these containers.

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