问题
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 配置解决,我宁愿不添加命令。抱歉,如果我遗漏了一些非常明显的东西。