
ファイアウォールの背後に Docker サーバーがあるため、内部サーバー以外のレジストリから直接イメージを取得することはできません。
設定しました二レジストリミラー(registry-1.docker.io
およびmcr.microsoft.com
)ドキュメント。
私のdaemon.json
見た目は次のようになります:
{
"registry-mirrors": [
"https://registry_1_docker_io.example.com",
"https://mcr_microsoft_com.example.com"
]
}
次のように実行することで、Docker Hub からイメージを正常にプルできます。
$ docker pull nginx:1
1: Pulling from library/nginx
....
Status: Downloaded newer image for nginx:1
私の問題はMicrosoftレジストリから画像を取得できません:
# docker pull mcr.microsoft.com/mssql/server:2017-latest
Error response from daemon: Get "https://mcr.microsoft.com/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
docker は直接接続しようとmcr
し、ミラーを無視します。mssql/server:2017-latest
の代わりに短いイメージ名を使用するとmcr.microsoft.com/mssql/server:2017-latest
機能しますが、タグが両方で同じである場合は、Microsoft の mcr ではなく docker hub からイメージを取得する可能性があります。
さらに、ログを見ると、docker はイメージのすべてのプロキシを順番に試行するため、イメージが間違ったリポジトリから取得される状況が発生する可能性があります。
ミラーを特定のレジストリのミラーとしてマークする方法はありますか?
答え1
ミラーを特定のレジストリのミラーとしてマークする方法はありますか?
いいえ、これはDockerエンジンの制限であり、registry-mirrors
Docker Hubにのみ適用されます。問題 18818詳細については。
近い将来、docker がイメージ処理を docker から containerd にスワップアウトすると、containerd はミラーを処理するための異なる構成を持つため、この状況は変わる可能性があります。