首页 > 解决方案 > 在 Docker 中,绑定挂载 nscd 套接字会破坏 gethostbyname

问题描述

我有一个 dockerized 应用程序,它需要来自 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

标签: dockerldap

解决方案


将 LOCALDOMAIN 设置为空有效:

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

推荐阅读