次から取得した画像を使用してプライベート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:5000
やcurl 10.0.0.26:5000/v1/search
を使用して正常にアクセスできることです。
また、--insecure-registry
フラグを渡す場所と方法を理解していません。
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に有効)
これが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
設定ファイル「/ 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サービスドッカーの再起動
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ファイルも参照してください。
OK。これがどのように機能するかを示しています。 docker 1.3.2以降でこのエラーが表示される場合は、これを実行してください
/etc/sysconfig/docker
に移動します
other_args="--insecure-registry 10.0.0.26:5000"
そして走る
Sudo service docker restart
次のコマンドを使用して、{YOUR_REGISTRY}をレジストリに置き換えます
boot2docker ssh "echo $'EXTRA_ARGS=\"--insecure-registry {YOUR_REGISTRY}\"' | Sudo tee -a /var/lib/boot2docker/profile && Sudo /etc/init.d/docker restart"
docker.serviceファイルを編集し、-dフラグの後に--insecure-registry x.x.x.xを追加し、dockerを再起動します
これは私のために働いた唯一のものであり、DOCKER_OPTSは効果がありませんでした
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の間に「=」がある場合とない場合の両方で使用できるようです。
Dockerクライアントのバージョンとレジストリdockerのバージョンを一致させる必要があることがわかりました。一致しないと、すべてが揃っているにもかかわらず接続の問題が発生します。
これは、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;
2段階のソリューション(--insecure-registry
なし):
/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は自己署名証明書を信頼します。
手間を省くために、gitlabが提供する無料のプライベートDockerレジストリサービスを使用してみませんか?
https://about.gitlab.com/2016/05/23/gitlab-container-registry/
レジストリは安全なので、問題はありません。
以下はテスト済みです:
ubuntu@ubuntu-xenial:~$ 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
プロキシとともに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で行われない場合、...プルは失敗します。
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