2016-09-11 7 views
0

ドッカーでは新しくなっていますが、解決方法はわかりません。ドッカーコンテナー内にインストールできない

私はジェンキン(ドッカー)画像を実行していて、すべてうまくいきました。数日前に私はジョブを作成したので、プルリクエストが行われるたびにnodejsテストを実行できます。ジョブの構築手順の1つはnpm installです。そして、仕事は常に、このエラーで失敗している:

tar (child): bzip2: Cannot exec: No such file or directory

だから、私はジェンキンス容器内bzip2をインストールする必要があることを知っているが、私はそれをどのように行うのですか?私はすでにdocker run jenkins bash -c "sudo apt-get bzip2"を実行しようとしましたが、私は得ました:bash: sudo: command not found

これで、どうすればいいですか?

ありがとうございます。

答えて

0

この回答は、dcokerコンテナの哲学の中にあります。ドッカーのコンテナは不変です。だから、これはあなたがこの問題を解決しようとすることができるものです。

  1. ベース画像、つまりジェンキンを始点として扱います。
  2. このベースイメージにログインしてbzip2をインストールしてください。
  3. これらの変更をコミットすると、新しいイメージが表示されます。
  4. 上記の画像を使用して、npmのような他のパッケージをインストールします。
  5. 上記の画像をコミットしてください。

注:多くの制御方法でコマンドを実行するには、常にこのようなものを使用することをお勧めします。

ドッキングウィンドウの幹部は、画像がそれらをコミットし、新たに作成した画像を使用するようにされて伝播されます任意の変更をするので、不変であるという事実にあるあなたの現在の問題の両方に、一言で言えば答えはジェンキンスbashの

を-ITさらなる変更を加える。私はこれが役立つことを願っています

1

ここで問題がたくさんありますが、最大のものは、実行中のコンテナの内部にインストールするのではなく、必要なツールを使ってイメージを構築する必要があることです。 Techtrainerによると、イメージは不変であり、少なくとも実行中のコンテナからは変更されず、コンテナは使い捨てです(データをコンテナの外側のボリュームに保存しない限り、内部の変更は失われます。 )。

私はtechtrainerとコンテナの変更を行い、docker commitで画像にコミットすることに同意しません。これはうまくいくでしょうが、非常にエラーが発生しやすく、容易に再現されない手作りの方法です。代わりに、Dockerfileを活用してdocker buildを使用する必要があります。使用しているジェンキン画像をDockerファイルを直接変更して変更するか、FROM jenkins:latestという子画像を作成することができます。

この画像を変更すると、Jenkins画像はユーザー "jenkins"として実行されるように設定されているため、アプリケーションのインストールを実行するにはrootに切り替える必要があります。 "sudo"アプリはほとんどの画像には含まれていませんが、コンテナの外部には、任意のユーザーとしてドッカーコマンドを実行できます。 cliからは、docker run -u root ...と同じくらい簡単です。あなたのDockerfileの中には、一番上にUSER rootがあり、最後にUSER jenkinsが必要です。

あなたのビルドをjenkinsコンテナで直接実行するのではなく、ジェンキンスコンテナから独立してアップグレードできる必要なビルドツールでエージェントを実行することです。これはずっと柔軟性があり、その環境に必要なツールだけで複数の環境を持つことができます。また、これをスケールアップすると、プラグインを使用してオンデマンドでエージェントをスピンアップすることができます。それらの一握りを同時に走らせてください。

関連する問題