问题
当我在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 environment
和nvm
。 npm
中的步骤:
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
中添加命令。对不起,如果我遗漏了一些非常明显的东西。
答案 0 :(得分:1)
这与Docker配置无关,但与Wercker如何处理Docker框无关。来自文档:
使用Sudo
wercker v2不再支持sudo命令,并且在使用时无效。
部署:
请注意,如果您更新项目以使用Docker(Ewok版本)并且此项目具有自动部署,则此部署很可能会失败。我们将来会更新有关如何部署这些容器的文档。
但是,我确实使用原始问题中显示的解决方案(临时解决方法?)来构建(和部署)。