wercker с переключением docker пользователя приводит к ошибке, как тогда установить nvm?

проблема

Моя сборка wercker выходит с Failed step: setup environment - Command exited with exit code: 1 когда я переключаю пользователя в моем образе Docker. я бегу wercker dev из командной строки. Dockerfile прекрасно работает с самим Docker в командной строке, а также в Docker Hub. Я могу запустить это нормально. Просто когда я использую его для 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 от имени пользователя root в моем Dockerfile (поэтому просто полностью удалите строки, связанные с пользователем, в приведенном выше блоке кода):

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     

Я не очень понимаю это. Когда я запускаю оба образа докера из командной строки (то есть с полностью удаленным 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, и даже если бы я мог, у меня возникла бы та же проблема, что и при запуске nvm с root: nvm и npm МОЖЕТ быть обнаружен, когда контейнер Docker создается из командной строки, но НЕ МОЖЕТ быть найден при запуске его с Wercker. Какое лучшее решение?

Я бы предпочел не добавлять команды в wercker.yml если это может быть решено через надлежащую пользовательскую конфигурацию или надлежащую конфигурацию nvm. Извините, если я упускаю что-то очень очевидное.

1 ответ

Решение

Это не имеет ничего общего с конфигурацией Docker, но с тем, как Wercker обрабатывает окна Docker. Из документации:

Использование Sudo

Команда sudo больше не поддерживается в wercker v2 и фактически ничего не делает при использовании.

И для развертывания:

Обратите внимание, что если вы обновите проект, чтобы использовать Docker (версия Ewok), и этот проект имеет автоматическое развертывание, это развертывание, скорее всего, завершится неудачно. В будущем мы обновим нашу документацию о том, как развернуть эти контейнеры.

Тем не менее, я получил его для сборки (и развертывания) с решением (временное решение?), Как показано в исходном вопросе.

Другие вопросы по тегам