Env
Background
MacOS に Rancher Desktop をインストールして docker pull
や docker login
などレジストリへのネットワーク転送が発生する処理を実行した時、timeoutエラーが発生して処理が失敗しまいました。
例えば docker run
を実行すると、以下のように既定レジストリへのリクエストがtimeoutによってキャンセルされてしまいます。
$ sudo docker run --name=mysql-ops-manage --restart on-failure -d mysql/mysql-server:8.0 Unable to find image 'mysql/mysql-server:8.0' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled (Client.Timeout exceeded while awaiting headers). See 'docker run --help'.
環境はwindowsですが、下記issueで同様の事象が報告されていました。
また、関連するMacのissueとして下記も起票されていました。
How
こちらのGistを参考にします。
Rancher Desktop on MacOSで実行されているlima-vm上で名前解決が失敗しているのが今回の事象の原因のようでした。 ドキュメントではApple Silicon上で再現したようですが、VM上の名前解決の話なのでx86_64でも同様に再現したと思われます。
上記ドキュメントで示されている通り、VM中の /etc/resolv.conf
のDNSサーバーIPをGoogle Public DNSに変更します。
$ LIMA_HOME="$HOME/Library/Application Support/rancher-desktop/lima" "/Applications/Rancher Desktop.app/Contents/Resources/resources/darwin/lima/bin/limactl" shell 0 $ sudo chown $(whoami) /etc/resolv.conf $ sudo sed -i 's/nameserver.*/nameserver 8.8.8.8/g' /etc/resolv.conf $ exit
修正後Rancher Desktopを再起動すると、冒頭の docker run
で正常にレジストリからのimage pullに成功しました。
$ docker run --name=mysql-ops-manage --restart on-failure -d mysql/mysql-server:8.0 Unable to find image 'mysql/mysql-server:8.0' locally 8.0: Pulling from mysql/mysql-server 6a4a3ef82cdc: Pull complete 5518b09b1089: Pull complete b6b576315b62: Pull complete 349b52643cc3: Pull complete abe8d2406c31: Pull complete c7668948e14a: Pull complete c7e93886e496: Pull complete Digest: sha256:d6c8301b7834c5b9c2b733b10b7e630f441af7bc917c74dba379f24eeeb6a313 Status: Downloaded newer image for mysql/mysql-server:8.0 ff10819f6715474c0c5bcec99432e813ea7222850e03e475f5760432c31ed497
Remarks
~/Library/Application\ Support/rancher-desktop/lima/_config/override.yaml
でDNSサーバーを直接指定することでも解決できるようです。
試しにcontainer/imageを削除し、Rancher Desktopを再度インストールします。
すると初期状態に戻り、 冒頭の docker run
は失敗します。
(初回とは異なるエラー文言となってしまいましたが...内容から名前解決による失敗は同様のようです)
$ sudo docker run --name=mysql-ops-manage --restart on-failure -d mysql/mysql-server:8.0 Unable to find image 'mysql/mysql-server:8.0' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 192.168.5.3:53: read udp 192.168.5.15:50831->192.168.5.3:53: i/o timeout. See 'docker run --help'.
~/Library/Application\ Support/rancher-desktop/lima/_config/override.yaml
を作成します。
$ cat << EOF > ~/Library/Application\ Support/rancher-desktop/lima/_config/override.yaml heredoc> hostResolver: enabled: false dns: - 8.8.8.8 heredoc> EOF
修正後Rancher Desktopを再起動すると、冒頭の docker run
で正常にレジストリからのimage pullに成功しました。
$ sudo docker run --name=mysql-ops-manage --restart on-failure -d mysql/mysql-server:8.0 Password: Unable to find image 'mysql/mysql-server:8.0' locally 8.0: Pulling from mysql/mysql-server 6a4a3ef82cdc: Pull complete 5518b09b1089: Pull complete b6b576315b62: Pull complete 349b52643cc3: Pull complete abe8d2406c31: Pull complete c7668948e14a: Pull complete c7e93886e496: Pull complete Digest: sha256:d6c8301b7834c5b9c2b733b10b7e630f441af7bc917c74dba379f24eeeb6a313 Status: Downloaded newer image for mysql/mysql-server:8.0 09a32632bc98e501119e0fc09708e5f7cddb0c8e7f0ec215d33f867271dbfba3
Appendix
- DNS does not work after updating from 1.0.1 to 1.1.0 · Issue #1702 · rancher-sandbox/rancher-desktop · GitHub
- MacOS: Change the DNS Resolution · Issue #1633 · rancher-sandbox/rancher-desktop · GitHub
- Docker network issues when using Rancher Desktop on Mac with Apple Silicon ARM-based processor (M1 chip) · GitHub
- Network | Lima
- MacOS×Rancher Desktopでdocker image pullが使えないの解決法 #Docker - Qiita