dockerfileでローカルイメージをベースイメージとして使用するにはどうすればよいですか?


126

私はdockerfileに取り組んでいます。私はずっとFROM、インデックス付きの画像をずっと使用していることに気づきました。

だから私は思う:

  • インデックスに追加FROMせずに、ローカル(カスタム)イメージの1つをベース()イメージとして使用するにはどうすればよいpushingですか?

回答:


148

特別なことをせずにご利用いただけます。と呼ばれるローカルイメージがある場合は、blah行うことができますFROM blah。そうした場合FROM blah、あなたのDockerfileではなく、していないというローカルイメージを持ってblahその後、ドッカーは、レジストリからそれを引くしようとします。

言い換えると、DockerfileにはFROM ubuntuが含まれているがubuntu、公式イメージとは異なるローカルイメージが呼び出された場合、そのイメージがオーバーライドされます。


5
私にはうまくいきません-boot2dockerに問題があるのでは?私は、最新バージョン1.3.1を持っている...ドッカーは、レジストリからプルしようとするに直進する最初のローカルにチェックするために(または多分それを報告しません)が表示されない stackoverflow.com/q/27046118/202168
Anentropic

@Anentropic boot2docker 1.5を使用しています。bash-4.3 $ docker imagesリポジトリタグイメージID作成された仮想サイズubuntu1504gcc484最新0378ea1c0b6c 19時間前1.36 GBそして、他のDockerfileで "FROM ubuntu1504gcc484"を実行すると、問題なく動作します。(不適切なフォーマットの謝罪)
Pejvan

私はもう知りません、私も今1.5にいます
Anentropic

1
イメージを作成し、ローカルレジストリ用にタグ付けしました。そのようにタグ付けすると、名前だけでは見つかりません。フルネームにはレジストリが含まれているので、そのように参照すると、そこにタグがフェッチされます。名前の単純な形式で再度タグ付けすると、レジストリを調べる前に検索されます。私のために働いた。
Gerry Gleason

1
いいえ、これは誤りです。にリストされてdocker image listいるローカルに同じ名前のイメージがあるにもかかわらず、Dockerはリモートレジストリからイメージをプルしようとしています。
John Smithオプション

16

検証済み:Docker 1.7.0で正常に動作します。

ところで、コマンドを--pull=true実行するときに指定しないでくださいdocker build

あなたは基本ローカル画像を使用したい場合は、オプションを指定しないでください--pull=true--pull=true常にイメージの新しいバージョンを引くしようとします。

- https://github.com/docker/docker/issues/14943


4
画像に名前などの-文字が含まれている場合、my-imageDockerはこの画像をローカルで解決しません。理由はわかりません。とにかく、単に-文字を使用せずに修正し、
docker

1
上のハイフン付きの名前で問題はありませんでしたDocker version 17.06.2-ce, build cec0b72が、画像にタグを付けた場合は、画像の仕様の一部としてタグを含めるようにしてください(FROM localimage:tag)。
スコット

@deFreitasは本当のようです。名前にハイフンが含まれているイメージがあり、Dockerはその名前のイメージがローカルに存在するにもかかわらず、リモートレジストリからそれをプルしようとしています。名前のハイフンに関するこのルールが真実であることが判明した場合、これは純粋な狂気になります。
John Smithオプション

@deFreitas:最後のコメントに続いて、ハイフンの代わりにアンダースコアを使用して試しましたが、同じ問題が発生しました。ローカルイメージが存在するにもかかわらず、Dockerがリモートからイメージをプルしようとしました。私の場合、少なくともハイフンは問題ではありません。
John Smithオプション

4

画像に-文字を含めることができます。タグ7.3.1611を持つcentos-base-imageという名前のローカルイメージ(ローカルレジストリではない)があるとします。

docker version 
      Client:
       Version:         1.12.6
       API version:     1.24
       Package version: docker-common-1.12.6-16.el7.centos.x86_64
       Go version:      go1.7.4

      Server:
       Version:         1.12.6
       API version:     1.24
       Package version: docker-common-1.12.6-16.el7.centos.x86_64
       Go version:      go1.7.4

docker images
 REPOSITORY            TAG
 centos-base-image     7.3.1611

Dockerfile

FROM centos-base-image:7.3.1611
RUN yum -y install epel-release libaio bc flex

結果

Sending build context to Docker daemon 315.9 MB
Step 1 : FROM centos-base-image:7.3.1611
  ---> c4d84e86782e
Step 2 : RUN yum -y install epel-release libaio bc flex
  ---> Running in 36d8abd0dad9
...

上記の例でFROMはローカルイメージをフェッチしていますが、カスタムレジストリ(例:)からイメージをフェッチするための追加の指示を提供できますFROM localhost:5000/my-image:with.taghttps://docs.docker.com/engine/reference/commandline/pull/#pull-from-a-different-registryおよびhttps://docs.docker.com/registry/#tldrを参照してください

最後に、名前を指定するときに画像が解決されない場合は、作成時に画像にタグを追加してみてください

このGitHubスレッドは、ローカルイメージを名前で見つけられないという同様の問題について説明しています

特定のタグを省略すると、Dockerは「最新」のタグが付いた画像を検索するため、:latestタグで画像を作成するか、FROMを変更します


0

タグだけでなく、そのタグが置かれているリポジトリも次のように配置することを忘れないでください。

docker images
REPOSITORY                                TAG                       IMAGE ID            CREATED             SIZE
elixir                                    1.7-centos7_3             e15e6bf57262        20 hours ago        925MB

このように参照する必要があります。

elixir:1.7-centos7_3
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.