プライベートDockerレジストリへのリモートアクセスを取得するにはどうすればよいですか?


82

https://github.com/docker/docker-registryから取得した画像を使用してプライベートDockerレジストリをセットアップしようとしています

実行するだけで:
docker run -p 5000:5000 registry

ローカルホストからのみこのリポジトリとの間でプル/プッシュできますが、別のマシンから(同じLAN上のプライベートアドレスを使用して)アクセスしようとすると、エラーメッセージが表示されて失敗します。

*2014/11/03 09:49:04 Error: Invalid registry endpoint https ://10.0.0.26:5000/v1/': 
Get https:// 10.0.0.26:5000/v1/_ping: Forbidden. If this private 
registry supports only HTTP or HTTPS with an unknown CA certificate,
please add `--insecure-registry 10.0.0.26:5000` to the daemon's 
arguments. In the case of HTTPS, if you have access to the registry's
CA certificate, no need for the flag; simply place the CA certificate 
at /etc/docker/certs.d/10.0.0.26:5000/ca.crt*

どのような狂気私を駆動することは、私が使用して正常にアクセスできることである: curl 10.0.0.26:5000 および/またはcurl 10.0.0.26:5000/v1/search

また、どこでどのように--insecure-registry旗を渡すべきかわかりません。


3
Docker 1.12の回答の多くは古くなっているようですが、docker 1.12(最新のATOW)に最適なvikas027の回答を参照してください
danday74 2016年

1
Ubuntuでは、Dockerのドキュメントこの回答がうまく機能しました。
バタンドワ2017年

回答:


73

OK-私はこれに対する解決策を見つけました-1日掘った後。

1.12.1未満のDockerの場合:

新しいクライアントバージョンは、SSLなしのプライベートレジストリでの作業を拒否していることが判明しました。

これを修正するには、クライアントマシンのデーモンを安全でないフラグで起動する必要があります。

次のように入力するだけです。

sudo service docker stop # to stop the service

その後

sudo docker -d --insecure-registry 10.0.0.26:5000

(を10.0.0.26独自のIPアドレスに置き換えます)。

Dockerの人がこのオプションをプル/プッシュコマンドラインに追加することを期待しています...

編集-代替的に- DOCKER_OPTS/ etc / default / docker ...内のenv変数にフラグを追加してからsudo service docker restart

もう一度編集してください-Dockerの人たちはそれに乗っているようです-そして修正はすぐに来るでしょう:https//github.com/docker/docker/pull/8935

Docker 1.12.1の場合:

以下のvikas027の回答に従ってください(centosに有効)


手順を複製して、リモートホストのプライベートレジストリにプッシュすることができました。プッシュも成功しました。ただし、プライベートレジストリに画像を一覧表示するにはどうすればよいですか?試しましdocker -H tcp://remote-host-ip:5000 imagesたが、エラーで返されました。
ハワードリー

これが発生することを確認できます。<ip>:5000 / v1 / searchをクエリすると、空の応答が返されます。おそらく彼らが持っている別のバグ:
Ofer Eliassaf 2014年

更新:リモートのプライベートレジストリに保存されている画像を検索/プルすることができました。docker search remote-host-ip:5000/image-nameそしてdocker pull remote-host-ip:5000/image-name両方の機能だけで罰金。さて、どうすれば画像を一覧表示できますか...
ハワードリー

3
@ ashleyaitken、Boot2Dockerで解決するために次のリファレンスを使用しました:github.com/boot2docker/boot2docker#insecure-registry。お役に立てば幸いです。
2015年

1
--insecure-registryこれは回避策であり、修正ではありません。
peterh -復活モニカ

28

これは、上の私のために働いていたものですCentOSの7.2ドッカー1.12.1(日付で、最新)。私のプライベートレジストリv2が実行されていた192.168.1.88:5000ので、それに応じて変更してください。これは、複数のレジストリがある場合にも機能します。追加し続けるだけです。--insecure-registry IP:Port

$ sudo vim /usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd 
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.88:5000
$
$ sudo systemctl stop docker
$ sudo systemctl daemon-reload
$ systemctl start docker

1
このソリューションは、Ubuntuで私のために機能した唯一のソリューションでした。
JARC 2016年

1
ありがとう男-うまく
いきました

2
私のために働いたが、docker.serviceはUbuntu16.04にあった/lib/systemd/system/docker.service
Karim Tabet 2016年

4
--insecure-registryこれは回避策であり、修正ではありません。
peterh -復活モニカ

1
作業。または、システム全体をハッキングする必要があります(別の同様の「機能」は、「ブリッジネットワーク」は実際にはDockerでのNATネットワークを意味しますが、実際のブリッジネットワークは存在しないということです)。これらの回答は、大きな問題に対するひどい回避策を広めます。これは簡単に修正できますが、どういうわけかそうではありません。これが理由で、私がそれらすべてに反対票を投じた理由です-それらはすべて悪い解決策です。
peterh -復活モニカ

24

設定ファイル「/ etc / default / docker」を編集します

sudo vi / etc / default / docker

ファイルの最後に行を追加します

DOCKER_OPTS = "$ DOCKER_OPTS --insecure-registry = 192.168.2.170:5000"

(192.168.2.170を独自のIPアドレスに置き換えます)

Dockerサービスを再起動します

sudo service docker restart


ありがとう!/etc/init.d/docker驚くべきことに、Ubuntu 14.04では、完全に編集するだけでは機能しません。しかし、あなたの修正は/etc/default/dockerそうします。
elimisteve 2015年

私のホストシステムは、あまりにも、Ubuntuの14.04である
daozhao

1
--insecure-registryこれは回避策であり、修正ではありません。
peterh -復活モニカ

12

以下は、Dockerサービス自体の構成方法について説明しているため、非常に役立つことがわかりました。https://docs.docker.com/articles/systemd/

systemctlコマンドに関するこの記事と一緒にhttps://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units

「dockerpullregistry:2.1.1」によって取得されたレジストリイメージを使用して、Centos7ベースのコンテナで次の一連のコマンドを使用しました。

sudo mkdir -p /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d
sudo touch override.conf
sudo nano override.conf

そしてoverride.conf内に以下を追加しました。

[Service]
ExecStart=
ExecStart=/usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

最初の空白のExecStart =は、すでに配置されているものをすべてクリアするため、/ usr / lib / systemd / system / docker.service ExecStart =ステートメントから保持したいものを必ず追加してください。

-d(daemon)オプションを指定しないと、「-Hを1つだけ指定してください」というエラーが表示されます。

次の一連のコマンドを発行した後、オーバーライドが設定されていることを確認できます。

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl status docker

docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
  Drop-In: /etc/systemd/system/docker.service.d
           └─override.conf
   Active: active (running) since Thu 2015-09-17 13:37:34 AEST; 7s ago
     Docs: https://docs.docker.com
 Main PID: 5697 (docker)
   CGroup: /system.slice/docker.service
           └─5697 /usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

注:ステータスメッセージのLoaded:およびDrop-In:行によって提供される情報は、既存のDockerデーモンが機能しているときに何が起こっているかを確認するのに役立ちます。

注:さらに手がかりが必要な場合は、Loaded:docker.serviceファイルでEnvironmentFile =を確認してください。


2
--insecure-registryこれは回避策であり、修正ではありません。
peterh -復活モニカ

こんにちは@peterh私はそれが回避策であり、安全でないものであることを理解しています。それを使用しているプロダクションシステムがあることは間違いありませんが、これは非常に悪いことです。
TJA 2017

1
@peterh正しく行う方法を示すリンクを教えていただけませんか。回答を更新し、リンクを参照します。
TJA 2017

11

OK。これが私がそれを機能させる方法です。docker 1.3.2以降でこのエラーが表示された場合は、これを実行してください

に行く /etc/sysconfig/docker

other_args="--insecure-registry 10.0.0.26:5000"

実行します

sudo service docker restart


1
ubuntuの下のレジストリ値に影響を与えるには「=」を入力する必要があります: "-insecure-registry = 10.0.0.26:5000"
Romain Jouin 2015年

@ジェイ私は初心者です。1.3.2はdockerの将来のバージョンのように聞こえます。ここで間違えなければ、現在のバージョンは 1.12github.com/docker/docker/releasesであることがわかります。
ravindrab 2016年

1
@ravindrabはどの宇宙で3より12小さいですか?;)
ferrari2k 2016年

2
--insecure-registryこれは回避策であり、修正ではありません。
peterh -復活モニカ

9

次のコマンドを使用して、{YOUR_REGISTRY}をレジストリに置き換えます

boot2docker ssh "echo $'EXTRA_ARGS=\"--insecure-registry {YOUR_REGISTRY}\"' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"

boot2docker質問のコンテキストに関係のない独立したツールキットです。
Arnaud Meuret 2015年

2
--insecure-registryこれは回避策であり、修正ではありません。
peterh -復活モニカ

7

docker.serviceファイルを編集し、-dフラグの後に--insecure-registry xxxxを追加し、dockerを再起動します

これは私のために働いた唯一のものです、DOCKER_OPTSは何の効果もありませんでした


あなたの言うことはすべて真実ですが、詳細が非常に乏しいため、答えはほとんど役に立たない
danday74 2016年

2
--insecure-registryこれは回避策であり、修正ではありません。
peterh -復活モニカ

4

Docker 1.12.1

CentOS7.2の場合

/usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000

以下のためのubuntu 16.04

/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd -H fd://
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000 -H fd://

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker

--insecure-registryオプションは、それとレジストリIDの間に「=」がある場合とない場合の両方で使用できるようです。


2
--insecure-registryこれは回避策であり、修正ではありません。
peterh -復活モニカ

2

DockerクライアントのバージョンとレジストリDockerのバージョンを一致させる必要があることがわかりました。一致しないと、すべてが整っているにもかかわらず、接続の問題が発生します。


2

2段階の解決策(なし--insecure-registry):

  1. レジストリから公開鍵をダウンロードします
  2. /etc/docker/certs.d/$HOSTNAME/ディレクトリに 入れて

 

mkdir -p /etc/docker/certs.d/10.0.0.26:5000
echo -n | openssl s_client -connect 10.0.0.26:5000 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/10.0.0.26:5000/registry.crt

これで、Dockerは自己署名証明書を信頼します。


1

これは、Centos7およびDocker1.12のvikas027からの回答に基づいています。

私はプロキシの後ろにいるので、私の完全な解決策は...

/etc/systemd/system/docker.service.d/http-proxy.conf

[Service]

Environment="FTP_PROXY={{MY_PROXY}}"
Environment="ftp_proxy={{MY_PROXY}}"

Environment="HTTPS_PROXY={{MY_PROXY}}"
Environment="https_proxy={{MY_PROXY}}"

Environment="HTTP_PROXY={{MY_PROXY}}"
Environment="http_proxy={{MY_PROXY}}"

Environment="NO_PROXY=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"
Environment="no_proxy=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"

/usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --insecure-registry {{MY_INSECURE_REGISTRY_IP}}:5000

そして再起動することを忘れないでください:)

sudo systemctl daemon-reload; sudo systemctl restart docker;

1
--insecure-registryこれは回避策であり、修正ではありません。
peterh -復活モニカ

0

Dockerでプロキシとともにローカルの安全でないレジストリを設定する:

1)ubuntuで、ファイル/ etc / default / dockerのDOCKER_OPTSの下に次のフラグ--insecure-registryIP:portを追加します。

1.1)ローカルIP /ホスト名/ドメイン名をバイパスするようにno_proxy環境変数を構成します...プロキシはインタラクティブメッセージをスローできます...続行のように、この中間メッセージはDockerクライアントを混乱させ、最後にタイムアウトします...

1.2)ドメイン名が設定されている場合... DNSを使用していない場合は、/ etc / hostsファイルを更新することを忘れないでください。

1.3)/ etc / default / dockerで、環境変数http_proxyおよびhttps_proxy ...を設定します。これにより、外部の会社のハブからイメージをダウンロードできるようになります。形式http_proxy = http:// username:password @ proxy:port

2)dockerサービスを再起動します...サービスとしてインストールされている場合は、sudo service dockerrestartを使用します

3)レジストリコンテナを再起動します[sudo docker run -p 5000:5000 Registry:2]

4)sudo docker tag imageid IP:port / imagename / tagnameifanyを使用して必要な画像にタグを付けます

5)イメージをプッシュします... sudo docker push ip:port / imagename

6)TLS / SSLなしでBなどの別のマシンからイメージをプルする場合は、Bでsetps 1、1.1および2を適用します。これらの変更がマシンBで行われない場合、プルは失敗します。


2
--insecure-registryこれは回避策であり、修正ではありません。
peterh -復活モニカ


0

Ubuntu 16.04

次の/etc/systemd/system/docker.service.d/registry.conf内容のファイルを作成します(存在しません)。

[Service]
#You need the below or you 'ExecStart=' or you will get and error 'Service has more than one ExecStart= setting, which is only allowed'
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.20.30.40:5000

その後

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker

0

上記の回答に加えて、「dockerformac」で機能したものを追加します。

  1. 画面の右上隅にあるMacトレイからDockerクジラのアイコンをクリックします。
  2. 設定」->「デーモン」をクリックします。
  3. 安全でないレジストリにIPとポートを追加します。
  4. デーモンを再起動します。

ここに画像の説明を入力してください

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