ローカルで利用可能なDockerfileを使用してDockerイメージを構築しようとしています。
docker build -t newimage .
私は以前にもこのコマンドを複数回使用しましたが、どういうわけか現在は機能しておらず、その理由を見つけられません。
誰かが問題を探すために可能な解決策または可能な領域で私を助けることができるなら、私は本当に役に立ちます。
私はすでに関連している可能性のある他の投稿を見ていました: Docker build tag repository name
はい!問題の理由がわかりました。
ドッカー構築プロセス
Dockerイメージを作成すると、イメージの作成中に、他のいくつかの中間イメージがプロセスで生成されます。次の中間画像が生成されると、以前の画像が削除されるため、docker images
にそれらが表示されることはありません。
-t
または--tag
を使用して提供するタグは最終ビルド用であり、同じタグが付けられた中間コンテナーはありません。
問題の説明
DockerfileでDockerイメージをビルドしようとすると、Successfully built image with IMAGEID
のような同様のメッセージが表示されてプロセスが正常に完了しない場合があります
したがって、失敗したビルドがdocker images
にリストされないことは明らかです
これで、タグ<none>
の画像が他の画像(中間)になります。これにより、イメージは存在するがタグはないという混乱が生じますが、イメージは実際には最終ビルドのあるべきものではないため、タグ付けされていません。
この場合のウォークアラウンドソリューションの1つとして、他のすべてのイメージがすでにタグ付けされている場合は、ビルドコマンドの直後に以下のコマンドを実行します。
docker tag $(docker image ls | grep "<none>" | awk '{print $3}') newimage:latest
私が知っているように、これはLinux OSでのみ機能します。
Dockerには何の問題もありません。
画像には複数のタグを付けることができます。
Alpine 3.4 4e38e38c8ce0 6 weeks ago 4.799 MB
Alpine latest 4e38e38c8ce0 6 weeks ago 4.799 MB
この例では、IDが4e38e38c8ce0
の画像にAlpine:latest
およびAlpine:3.4
のタグが付けられています。 docker build -t Alpine .
を実行すると、latest
タグがイメージ4e38e38c8ce0
から削除され、新しくビルドされたイメージ(異なるIDを持つ)に割り当てられます。
画像から最後のtag
を削除しても、画像は自動的には削除されません。 <none>
として表示されます。
Dockerもキャッシュを使用します。したがって、Dockerfileでイメージをビルドし、そのファイルを変更して、イメージを再度ビルドすると、変更を元に戻して再度ビルドすると、2つのイメージができます。最初と最後のステップでビルドしたイメージは同じです。 2番目の画像は「タグ付け」されます<none>
。
イメージの複数のバージョンを保持する場合は、docker build -t
を使用しますtag:version
image:tag .
どこ version
tag
は、変更を加えるたびに変更されます。
編集:私がタグと呼んだものは実際にはイメージ名で、バージョンを呼んだものはタグと呼ばれます: https://docs.docker .com/engine/reference/commandline/tag /