openldap : ldapsearch ldap_bind: 无效凭证 (46)

openldap : ldapsearch ldap_bind: Invalid credentils (46)

我正在尝试从主机到容器进行 ldapsearch,但它不起作用。

我从 :

开始
docker run --env LDAP_ORGANISATION="OpenLdap" --env LDAP_DOMAIN="example.org" --env LDAP_ADMIN_PASSWORD="admin" -p 389:389 -p 636:636 --name openldap --detach osixia/openldap:1.5.0 

然后这有效:

$ docker exec openldap ldapsearch -x -H ldap://localhost -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# example.org
dn: dc=example,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: OpenLdap
dc: example

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

但这在直接从主机执行时不会:

ldapsearch -x -H ldap://localhost -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin

结果:

ldap_bind: Invalid credentials (49)

非常感谢您的帮助

我在我的本地系统上测试了这个,并使用更正的 docker run 命令行...

docker run \
  --env LDAP_ORGANISATION="OpenLdap" \
  --env LDAP_DOMAIN="example.org" \
  --env LDAP_ADMIN_PASSWORD="admin" \
  -p 389:389 \
  -p 636:636 \
  --name openldap \
  --detach osixia/openldap:1.5.0 

...我可以成功 运行 你的 ldapsearch 命令在内部和 容器外。您看到的行为表明,当 你在主机上 运行ning ldapsearch,它没有连接到 您在容器内使用的相同 ldap 服务器。

您需要检查是否有其他任何东西正在侦听端口 389 你的系统。在Linux下,可以通过运行ning netstat -tln; 如果你在 Windows,等价的命令是 netstat -aon.

如果您发现其他东西正在监听 389 端口,您的选择是 (a) 杀死它或 (b) 将容器化服务映射到不同的端口。