Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wercker与docker切换用户结果出错,如何安装nvm呢?_Docker_Wercker - Fatal编程技术网

wercker与docker切换用户结果出错,如何安装nvm呢?

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 &&

问题

当我在Docker映像中切换用户时,我的wercker build退出,步骤:设置环境失败-命令退出,退出代码: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
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步骤中改为使用I
source~/.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
...