問題
Failed step: setup environment - Command exited with exit code: 1
Docker イメージでユーザーを切り替えると、wercker ビルドが終了します。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
( for gulp
、bower
)。通常、これをルートとしてインストールすることは好まないため、このためのユーザーを追加します。
回避策
ただし、nvm
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
これはよくわかりません。コマンドラインから両方の 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 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 を実行するのと同じ問題がありますか?コマンドラインからインスタンス化されますが、Wercker で実行すると見つかりません。最善の解決策は何ですか?
wercker.yml
適切なユーザー構成または適切な nvm 構成によって解決できる場合は、コマンドを追加したくありません。非常に明白な何かが欠けている場合は申し訳ありません。