2

これはおそらくある時点で尋ねられたのですが、どこにも見つかりません。コミットしているコンテナー内のファイルの変更を失うことなく、Docker イメージへの変更をコミットすることができない (または方法がわからない) ようです。これが私のユースケースです。WindowsでBoot2Dockerを使用していますが、

Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8

dockerHub からジェンキンスの最新バージョンを取得します。

docker pull jenkins

私はそれを実行し、Webインターフェイスポートを再ルーティングします

docker run -dt -p 8010:8080 jenkins

インターフェイスに移動して、いくつかのプラグインをインストールします。プラグインをインストールしてから、Jenkins を再起動します。次に、変更をコミットしようとします。

docker commit $(docker ps -lq) <my_user_name_on_docker_hub>/<name_of_the_new_image>

docker ps -lq は、最後に実行されたコンテナーの ID を返します。現時点ではこのコンテナーのみを実行しているため、これが正しい ID を返すと確信しています (docker ps を実行して実際にコンテナーを検索することでも確認しました)。次に、変更をプッシュします。

docker push <my_user_name_on_docker_hub>/<name_of_the_new_image>

プッシュは、dockerHub に既に存在するすべてのリビジョンを通過し、最後のリビジョンに到達して 4 メガバイトがレジストリにアップロードされるまでそれらをすべてスキップします。それでも、この新しいイメージを実行しようとすると、何も変更されていないジェンキンスの基本イメージにすぎません。私がインストールしたプラグインなしで。私が理解している限り、イメージのユニオン ファイル システムへの変更 (jenkins プラグインはそこにバイナリとしてインストールされます) をコミットする必要があります。変更を加えた新しいイメージが必要です。

私は何を間違っていますか?

編集:いくつかのテスト ジョブを作成して実行し、docker exec -it bash を使用してファイル システムを歩き回り、jenkins は /var/jenkins_home/jobs の下に各ジョブの新しいディレクトリを作成しますが、docker diff を実行すると、一時ファイルのみが作成されたことを示しています。そして、コンテナーをコミット、プッシュ、停止し、プッシュされたばかりのイメージから新しいコンテナーを実行すると、ジョブ フォルダーは他のすべてのものと一緒に消えます。

EDIT2:他のフォルダーにファイルを作成しようとしましたが、docker diff は、/var/jenkins_home/ ディレクトリ以外のすべての場所で変更を確認しているようです。

EDIT3:これは関連しているようです-Jenkins DockerHubページから

この画像の使い方

docker run -p 8080:8080 jenkins これにより、ワークスペースが /var/jenkins_home に保存されます。プラグインや構成を含め、すべての Jenkins データがそこに存在します。おそらくそれを永続的なボリュームにしたいと思うでしょう:

docker run --name myjenkins -p 8080:8080 -v /var/jenkins_home jenkins 「myjenkins」という名前のコンテナーのボリュームは永続的になります。

ホストからボリュームにマウントをバインドすることもできます。

まず、コンテナー内の jenkins ユーザー (jenkins ユーザー - 通常は uid 102 - または -u root を使用) が /your/home にアクセスできることを確認してから、次のようにします。

docker run -p 8080:8080 -v /your/home:/var/jenkins_home ジェンキンス

-v トグルを使用してコマンドを実行しようとしましたが、実際にはコミットが永続化されませんでした。

4

1 に答える 1