概要
PostgreSQL の公式の DockerFile を GitHub から取得して、ビルドしたところエラーが出てビルドできませんでした。
+ gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4
gpg: keybox '/tmp/tmp.TJGmsE5I4v/pubring.kbx' created
gpg: keyserver receive failed: Cannot assign requested address postgresql
keyserver receive failed: Cannot assign requested address postgresql
なにをやってもほぼ間違いなく上記のエラーが出るのですが、ごくまれに docker のビルドに成功するのです。
どういうことなのか、とはまってしまいました。
正解
GitHubのイシュー の F30 さんの方法で現象を回避できました。
(Came here through Google after having the same error in a different container.)
In my case, the error with [ha.]pool.sks-keyservers.net was related to IPv4 vs. IPv6: GPG's dirmngr might select a v6 server from the pool and try to connect to it, even though it doesn't have v6 connectivity inside the container.
I'm not sure whether this is a bug in Docker or dirmngr, but there is at least this bug related to dirmngr and IPv6.
If one wants stay with sks-keyservers, ipv4.pool.sks-keyservers.net can be used.
彼の説明によると、dirmngr が ipv6 のサーバーをプールから選択しているが、そのようなサーバーは存在しない、ということでした。
そのため、DockerFile 内のサーバー名を ipv4 のサーバーを明示したら確実に成功するようになりました。
# 31 行目
&& gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
# 67 行目
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
# 31 行目
&& gpg --batch --keyserver ipv4.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
# 67 行目
gpg --batch --keyserver ipv4.pool.sks-keyservers.net --recv-keys "$key"; \