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), и этот проект имеет автоматическое развертывание, это развертывание, скорее всего, завершится неудачно. В будущем мы обновим нашу документацию о том, как развернуть эти контейнеры.
Тем не менее, я получил его для сборки (и развертывания) с решением (временное решение?), Как показано в исходном вопросе.