docker - wercker 与 docker 切换用户导致错误,那么如何安装 nvm?

标签 docker wercker

问题

我的 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 (对于 gulpbower )。通常我不喜欢以 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阶段,但在步骤中它会出错 nvmnpm没有找到。 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),我可以执行 nvmnpm很好,但是当我通过 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/

相关文章:

ruby-on-rails - Wercker 测试无法打开临时文件

android - Wercker设置环境步骤错误: Guest command failed with exit code -1: mkdir -p "/pipeline"

node.js - 通过FTP将nodejs应用程序部署到Azure不起作用

docker - 在 cpanel 上运行 docker 容器

linux - 为什么当 docker 镜像有体积时我不能触摸文件?

docker - 如何在 docker swarm 集群中获取服务的 Ips?

asp.net - Release模式下 swagger 文件出现问题

Docker挂载顺序乱序,不让我挂载我的目录

git - 将未跟踪的文件夹复制到另一个分支