デフォルトのdockerレジストリをdocker.ioからプライベートレジストリに変更するにはどうすればよいですか?


124

デフォルトでは、コマンドを発行すると:

sudo docker pull ruby:2.2.1

デフォルトではdocker.io公式サイトからプルします。

Pulling repository docker.io/library/ruby

プライベートレジストリに変更するにはどうすればよいですか。つまり、私が発行した場合

sudo docker pull ruby:2.2.1

自分のプライベートレジストリからプルします。出力は次のようになります。

Pulling repository my_private.registry:port/library/ruby

それを機能させる方法を見つけることができましたか?まったく同じものを探していました。私はドッカーのプライベートレジストリとしてネクサスを使用しています。docker pullコマンドでドメイン名とポート番号を使用したくありません。
Dinesh

回答:


56

更新:あなたのコメントに続き、現在デフォルトのレジストリを変更することはできません。詳細については、この問題を参照してください。

ホストとポートを自分のものに置き換えて、これを行うことができるはずです:

docker pull localhost:5000/registry-demo

サーバーがリモートであるか認証を持っている場合は、次のコマンドでサーバーにログインする必要があります。

docker login https://<YOUR-DOMAIN>:8080

次に実行します:

docker pull <YOUR-DOMAIN>:8080/test-image

14
docker pull <YOUR-DOMAIN>:8080/test-image大丈夫だった。しかし、私が望んでいるのはdocker pull test-image、DOMAINとPortを指定せず、ログインも必要ないことです。
メインフレーム管理者、

2
私はあなたのコメントに基づいて私の答えを更新しました。現在、デフォルトのレジストリを設定することはできません
Guy

ほとんどのイメージが依存しているデフォルトの名前空間が壊れているため、別のデフォルトレジストリを設定することも不可能になるでしょう
Matt

彼らは@scopesnpmのようにして、既存の名前空間と競合することなく新しい名前空間を導入することができます。レジストリのホスト名をイメージ名に含めると、企業やプロジェクト内でのレジストリのキャッシュ/プロキシ/ロックダウンが困難になります。これはよく説明しています:informit.com/articles/article.aspx?p
Alexander Klimetschek '25

このPRは、そのトピックの最新の議論のようです:github.com/moby/moby/pull/34319
Alexander Klimetschek

21

これ実際には可能ですが、正規のDocker CEまたはEEバージョンを使用していないことが判明しました。

Red Hatのdocker forkを '--add-registry'フラグで使用するか、独自のハードコードされたデフォルトのレジストリ名前空間/インデックスを使用するように変更されたregistry / config.goを使用して、ソースからdockerを構築できます。


3
RedHatのフォークは、centos-extrasで利用可能なものです。docker.ioバージョンに切り替えた後、動作し--add-registryなくなった理由を理解してくれてありがとう。
chutz 2017

2
--block-registry index.docker.ioオプションを使用して、デフォルトのレジストリを削除することもできます。
エヴァン

1
--add-registry プル要求をされたマージされません。この機能は最終的に拒否されました(#11816)。
フランクリンピアト

9

fedora distroを使用している場合は、ファイルを変更できます

/etc/containers/registries.conf

ドメインdocker.ioの追加


このredhat固有の構成ファイルは、dockerdをで起動するために使用されます--add-registryプルリクエストマージされなかった場合、この機能はDockerによって採用されません。(機能も最終的に拒否されました(#11816
フランクリンピアト

6

コミュニティ内で作成される断片化のため、サポートされないようです(つまり、2人のユーザーが異なる画像を取得しますubuntu:latest)。イメージ名の前にホストを追加するだけです。このgithubの問題を見る議論に参加するには、を。

(注意:これは意欲的なコメントとして意図されたものではなく、言及されたgithubの問題で続くことができる議論の非常に短い要約です。)


10
断片化はありますが、Linuxの初期の段階では、最終的に3つだけになりました(ソースbase [arch、gentoo、slax、...]、debian based [debian / ubuntu]、およびredhat based [enterprise linux、rhel、centos])。セキュリティの観点からは、デフォルトのアップストリームレジストリを自分で管理できるものに変更できる方がよいでしょう
Dwight Spencer

2
「linux、redhat、debian、sourceが3つしかない」と言うのは、「検索プロバイダーがgoogle、bing、その他すべての検索プロバイダーが3つしかない」と言うようなものです...
Chris Browne

4

/etc/docker/daemon.jsonに以下のオプションを追加してみました。(私はCentOS7を使用しました)

"add-registry": ["192.168.100.100:5001"],
"block-registry": ["docker.io"],

その後、Dockerデーモンを再起動しました。そしてそれはdocker.ioなしで動作しています。この人が役に立てば幸いです。


この構成はRedHatに固有です。--add-registry プル要求をされたマージされません
フランクリンピアト

2

Dockerの公式見解は、問題#11815で説明されています

問題11815:プルコマンドで使用されるデフォルトのレジストリを指定できる

解決:

以前に指摘したように(#11815)、これは名前空間を断片化し、コミュニティーにかなりの悪影響を及ぼし、dockerfileを移植できなくなります。

[Maintainer]はこの理由でこれを閉じます。

Red Hatには、それを可能にする特定の実装がありました(anwserを参照してください。ただし、Dockerアップストリームプロジェクトによって拒否されました)。RHEL / CentOS 7で--add-registry設定された引数に依存していました/etc/containers/registries.conf


1

以前は、Ubuntu 14:04で動作し、いくつかの問題があった構成ファイルを使用DOCKER_OPTSしてこれを達成できました/etc/default/dockerで動作し、Ubuntu 15:04で。これが修正されたかどうかはわかりません。

以下の行は/etc/default/docker、dockerデーモンを実行するホスト上のファイルに移動する必要があります。プライベートレジストリへの変更ポイントは、ローカルネットワークにインストールされます。注:この変更を行うには、Dockerサービスを再起動する必要があります。

DOCKER_OPTS="--insecure-registry <priv registry hostname/ip>:<port>"

11
「--insecure-registry」フラグを使用すると、DockerはTLS認証なしで名前付きレジストリからプルできます。デフォルトのレジストリが指定されていない場合、デフォルトのレジストリを設定することはありません。
ジョサイア

0

Guyによる元の回答(今日(2020年)にも有効です)を追加します。

の場合と同様に、デフォルトのDockerレジストリーをオーバーライドすることはmaven、実際にはお勧めできません。

を使用する場合maven、プロキシとして機能するローカルリポジトリ管理システムを介して、Mavenセントラルリポジトリからアーティファクトをプルします。これらのアーティファクトはプレーンな未加工のライブラリ(jar)であり、同じ名前のjarをプッシュすることはほとんどありません。

一方、Dockerイメージは完全に動作し、実行可能な環境であり、Docker Hubからイメージをプルし、それを変更して、同じ名前でローカルレジストリ管理システムにこのイメージをプッシュするのはまったく意味がありません。その名前が示すとおり、企業のコンテキストでのみです。この場合、2つの画像の唯一の違いは、正確にそのパスです。

したがって、次のルールを設定する必要があります。画像のプレフィックスはその起源を示します。デフォルトでは、イメージにプレフィックスがない場合、Docker Hubからプルされます。


まさにこの理由により、デフォルトでリリースを保存するMavenリポジトリは上書きを許可せず、分類子を提供します。同様にdockerはタグを使用します。
coz

-5

試していませんが、多分/etc/hostsfor hub.docker.comまたは同様の何か(docker.io?)を追加してDNS解決プロセスを乗っ取ることができますか?


4
それは接続段階で爆発します。接続するサーバーには、ドメインの適切なTLS証明書がありません。
Michael Mol
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.