エラーメッセージ
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.11/main: No such file or directory
WARNING: Ignoring APKINDEX.70f61090.tar.gz: No such file or directory
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.11/community: No such file or directory
WARNING: Ignoring APKINDEX.ca2fea5b.tar.gz: No such file or directory
2 errors; 15 distinct packages available
考えたこと
明らかにAlpine側の問題だろうと思っていたのですが、
このIssueがだいぶ前からあったみたいで、
ここでめっちゃ盛り上がっています。
何が原因なのかよくわからないんですけど、
http://dl-cdn.alpinelinux.org/alpine/v3.11/community
直接curlで取りに行くと取れるんですよね。
にも関わらず、Error MessageはNo such file or directory
となっている。
ということは、
- Alpine側のDNSがぶっ壊れているのか
- Dockerコンテナの内部ネットワークがおかしくなっているのか
と考えられそうです。
まぁ、Dockerでyumやaptでファイルはとってこれているので、おかしいことないと思うのですが、一応Dockerのホストを探す仕組みを調べてみます。
Dockerの外部との通信の仕組みが簡潔にわかりやすく書いてありますね。
この警告は、Docker コンテナがローカルの DNS サーバを使えないためです。そのかわりDocker はデフォルトで外部のネームサーバを使います。
なるほど。どうぞどうぞって感じですが、使っているDNSサーバーは違うんですね。
ローカルのみてるDNSと別物みたいですし、このネームサーバーに到達できなくてコケている説をまず考えてみますか。
とりま、Dockerのイメージの内部で、どのように名前解決しているのかを調べたいのですが、どこにDNSの設定ファイルがあるのか。。。
頑張って調べたところ、どうやら/etc/resolv.conf
が参照しているDNSのアドレスを設定する場所っぽかったので確認すると
nameserver 8.8.8.8
nameserver 8.8.4.4
となっていました。
ローカルのマックの方は
#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
#
# To view the DNS configuration used by this system, use:
# scutil --dns
#
# SEE ALSO
# dns-sd(1), scutil(8)
#
# This file is automatically generated.
#
nameserver 192.168.254.2
nameserver 8.8.8.8
192の方が普通にローカルが参照してるDNSだろうなぁという感じ
8.8.8.8はDockerによって追記されたものだろうけど、
多分ここにたどり着いていないんですよね。
なので、
nameserver 192.168.254.2
nameserver 8.8.8.8
nameserver 8.8.4.4
としてみると、
うまくいきました
8.8.8.8からAlpineが見えないのは結局Alpine側が悪いってことでいいんですかね??(よくわかってない)