我正在尝试从主机到容器的 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)
非常感谢您的帮助
答案 0 :(得分:1)
我在本地系统上对此进行了测试,并使用更正的 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
命令
容器外。你看到的行为表明,当
您在主机上运行 ldapsearch
,它没有连接到
您在容器内使用的同一个 ldap 服务器。
您需要检查是否有其他东西在监听 389 端口
你的系统。在 Linux 下,您可以通过运行 netstat -tln
;
如果您使用的是 Windows,则等效命令为 netstat -aon
。
如果你发现有其他东西正在监听 389 端口,你的选择是 (a) 终止它或 (b) 将容器化服务映射到不同的端口。