wercker与docker切换用户结果出错,如何安装nvm呢?
问题 当我在Docker映像中切换用户时,我的wercker build退出,步骤:设置环境失败-命令退出,退出代码:1。我正在从命令行运行wercker与docker切换用户结果出错,如何安装nvm呢?,docker,wercker,Docker,Wercker,问题 当我在Docker映像中切换用户时,我的wercker build退出,步骤:设置环境失败-命令退出,退出代码:1。我正在从命令行运行wercker dev。Dockerfile可以在命令行和Docker Hub上使用Docker自身构建。我能跑得很好。当我把它用于wercker时,错误就发生了 例如,我的Dockerfile中有以下代码: # Adding user RUN adduser --disabled-password --gecos '' dockworker &&
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用户身份安装,因此我会为此添加一个用户
解决方法?
但是,当我在Dockerfile中以root用户身份安装nvm
时(因此只需完全删除上面代码块中与用户相关的行):
然后,它确实通过了设置环境
阶段,但在这些步骤中,它错误地发现没有找到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安装
,没有任何问题,因此这似乎从未通过执行过。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步骤中改为使用Isource~/.bashrc
,则它不起作用
问题
所以我的问题是:我做错了什么,因为我无法在Wercker构建中切换用户,即使我可以,我是否会遇到与使用root运行nvm相同的问题:当从命令行实例化Docker容器时,可以找到nvm和npm,但在使用Wercker运行时找不到。最好的解决方案是什么
如果可以通过正确的用户配置或nvm配置来解决,我不希望在
wercker.yml
中添加命令。很抱歉,我遗漏了一些非常明显的信息。这与Docker配置无关,但与Wercker处理Docker Box的方式有关。从文件中:
使用Sudo
wercker v2中不再支持sudo命令,并且在使用时实际上什么也不做
部署:
请注意,如果您更新项目以使用Docker(Ewok版本),并且此项目具有自动部署,则此部署很可能会失败。我们将在将来更新关于如何部署这些容器的文档
但是,我确实让它使用解决方案(临时解决方案?)进行了构建(和部署),如原始问题所示
...
- 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
...