1

问题

Failed step: setup environment - Command exited with exit code: 1当我在 Docker 映像中切换用户时,我的 wercker 构建退出。我正在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(for gulp, bower)。通常我不喜欢以 root 身份安装它,因此我为此添加了一个用户。

解决方法?

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

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阶段,但在这些步骤中它会出错nvm并且npm找不到。中的步骤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)我可以执行nvm并且npm很好,但是当我通过 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
...

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

问题

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

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

4

1 回答 1

1

这与 Docker 配置无关,而与 Wercker 处理 Docker 盒子的方式有关。从文档中:

使用须藤

wercker v2 不再支持 sudo 命令,并且在使用时实际上什么都不做。

对于部署:

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

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

于 2015-08-19T12:01:23.620 回答