在 Docker 中,绑定安装 nscd 套接字会中断 gethostbyname

In Docker, bind mounting the nscd socket breaks gethostbyname

我有一个 docker 化的应用程序,需要来自 docker 主机的 nscd 套接字。所以我在 运行 时间绑定安装套接字。 DNS、getpwnamgetpwuid 等都可以正常工作。奇怪的是,我发现 gethostbyname 不再起作用了。例如:

docker run --rm -v /var/run/nscd/socket:/var/run/nscd/socket ubuntu hostname -i
hostname: Name or service not known

然而,在 alpine 下,它确实有效:

docker run --rm -v /var/run/nscd/socket:/var/run/nscd/socket alpine hostname -i
172.18.85.4

有谁知道为什么会这样gethostbyname以及如何修复它?

更新:如果我在主机和容器上使用相同的 glibc,它仍然会中断:

ldd --version
ldd (GNU libc) 2.17
docker run --rm centos ldd --version
ldd (GNU libc) 2.17
docker run --rm -v /var/run/nscd/socket:/var/run/nscd/socket centos hostname -i  
hostname: Name or service not known

将 LOCALDOMAIN 设置为无效:

docker run -it --rm -v /var/run/nscd/socket:/var/run/nscd/socket --env LOCALDOMAIN='' centos hostname -i