web-dev-qa-db-ja.com

プライベートDocker-Registryへのリモートアクセスを取得する方法は?

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

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

Localhostからのみこのリポジトリにプル/プッシュできますが、別のマシンから(同じ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:5000curl 10.0.0.26:5000/v1/searchを使用して正常にアクセスできることです。

また、--insecure-registryフラグを渡す場所と方法を理解していません。

80
Ofer Eliassaf

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アドレスに置き換えてください)。

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

編集-代わりに-/ etc/default/docker ...内のDOCKER_OPTS env変数にフラグを追加してから、Sudo service docker restartを追加できます

もう一度編集-Dockerの仲間がいるようです-修正はすぐに来ます: https://github.com/docker/docker/pull/8935

docker 1.12.1の場合:

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

71
Ofer Eliassaf

これがCentOS 7.2およびDocker 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
27
vikas027

設定ファイル「/ 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サービスドッカーの再起動

24
daozhao

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

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

「docker pull registry:2.1.1」によって取得されたレジストリイメージを持つCentos 7ベースのコンテナで、次の一連のコマンドを使用しました

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デーモンの動作を確認するのに役立ちます。

注:さらに詳しい情報については、EnvironmentFile =のLoaded:docker.serviceファイルも参照してください。

12
TJA

OK。これがどのように機能するかを示しています。 docker 1.3.2以降でこのエラーが表示される場合は、これを実行してください

/etc/sysconfig/dockerに移動します

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

そして走る

Sudo service docker restart

12
Jay

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

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

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

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

7
Diman

Docker 1.12.1

CentOS 7.2の場合

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

buntu 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の間に「=」がある場合とない場合の両方で使用できるようです。

4
tedwards

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

2
Saikrishna Rao

これは、Centos 7およびDocker 1.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
danday74

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
vp_arth

手間を省くために、gitlabが提供する無料のプライベートDockerレジストリサービスを使用してみませんか?

https://about.gitlab.com/2016/05/23/gitlab-container-registry/

レジストリは安全なので、問題はありません。

0
danday74

上記の回答に加えて、私は「Mac用ドッカー」で機能したものを追加しています:

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

enter image description here

0
Parantap Sharma

以下はテスト済みです:

[email protected]:~$ docker -v
Docker version 17.05.0-ce, build 89658be

上記のすべての答えを試しましたが、これらのどれもうまくいきませんでした。

私はそれを機能させるために これらの指示 に従っていました

openssl req \
  -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
  -x509 -days 365 -out certs/domain.crt

そして

Linux: Copy the domain.crt file to
/etc/docker/certs.d/myregistrydomain.com:5000/ca.crt on every Docker
Host. You do not need to restart Docker.

その他の問題が発生し、次のように解決されました。

問題1

Error response from daemon: Get https://10.20.30.40:8001/v1/users/: x509: cannot validate certificate for 10.20.30.40 because it doesn't contain any IP SANs

ソリューション

/ etc/hostsのホストマッピング:

10.20.30.40 somehost

問題2

Error response from daemon: Get https://somehost:8001/v1/users/: x509: certificate is valid for , not somehost

ソリューション

opensslコマンドを再実行します

$ openssl req \
  -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
  -x509 -days 365 -out certs/domain.crt

次を除くすべてのステップでEnterキーを押します。

Common Name (e.g. server FQDN or YOUR name) []:

レジストリのfqdn、つまりsomehostを入力します

必ずmyregistrydomain.comという名前をCNとして使用してください。

レジストリへのログインが成功しました

問題3

デーモンからのエラー応答:Get https:// somehost:8001/v1/users / :x509:不明な機関によって署名された証明書

ソリューション

Sudo mkdir -p /etc/docker/certs.d/somehost:8001/
Sudo cp certs/domain.crt /etc/docker/certs.d/somehost:8001/ca.crt
0
030

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

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

1.1)no_proxy env変数を設定して、ローカルIP /ホスト名/ドメイン名をバイパスします...プロキシが対話メッセージをスローできるように...続行のように、この中間メッセージはdockerクライアントを混乱させ、最終的にタイムアウトします...

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

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

2)ドッカーサービスを再起動します...サービスとしてインストールされている場合は、Sudoサービスドッカー再起動を使用します

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

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

5)画像をプッシュ... Sudo docker Push ip:port/imagename

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

0
Ragha

buntu 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
danday74