问题
我的 wercker 构建以 Failed step: setup environment - Command exited with exit code: 1
退出当我在我的 Docker 镜像中切换用户时。我正在运行 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
, 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 配置来解决。抱歉,如果我遗漏了一些非常明显的东西。
最佳答案
这与 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.
但是,我确实使用原始问题中显示的解决方案(临时解决方法?)来构建(和部署)它。
关于docker - wercker 与 docker 切换用户导致错误,那么如何安装 nvm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31625575/