在 Docker 中,绑定安装 nscd 套接字会中断 gethostbyname
In Docker, bind mounting the nscd socket breaks gethostbyname
我有一个 docker 化的应用程序,需要来自 docker 主机的 nscd 套接字。所以我在 运行 时间绑定安装套接字。 DNS、getpwnam
、getpwuid
等都可以正常工作。奇怪的是,我发现 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
我有一个 docker 化的应用程序,需要来自 docker 主机的 nscd 套接字。所以我在 运行 时间绑定安装套接字。 DNS、getpwnam
、getpwuid
等都可以正常工作。奇怪的是,我发现 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