我必须将 LDAP 与两种不同的服务集成:exoPlatform 和 Liferay。因此,我通过 Docker 镜像使用以下配置设置了 LDAP 服务器:
- 服务器名称:openldap
- 基础提供商网址:ldap://openldap:389
- 基本 DN:cn=users,ou=Platform,o=acme,dc=example,dc=org
我的管理员帐户只是:cn=admin
使用 exoPlatform,它工作正常,我可以使用我的 LDAP 帐户登录。 这里是 picketlink-idm-openldap-config.xml 中的配置:
<option>
<name>providerURL</name>
<value>ldap://openldap:389</value>
</option>
<option>
<name>adminDN</name>
<value>cn=admin,dc=example,dc=org</value>
</option>
<option>
<name>adminPassword</name>
<value>admin</value>
</option>
但是对于 Liferay,它告诉我主机未知......
无法绑定(bind)到 LDAP 服务器
莱弗雷 | javax.naming.CommunicationException: openldap:389 [根异常是 java.net.UnknownHostException: openldap]
引起原因:java.net.UnknownHostException:openldap
我不知道它是否相关,但无论如何我都会说以防万一,我同时启动了 2 个不同的 docker-compose:
- 包含图像
openldap
、phpldapadmin
、exoPlatform
和mysql1
- 包含
liferay
和mysql2
镜像的一个
我也是一家公司代理的幕后黑手,但我不记得为 exoPlatform 做过什么特别的事情。 我只是将我的 exoPlatform 和 Liferay 图像的代理设置添加到 Catalina Tomcat。
此外,我已使用 Bind 方法
在 Liferay 控制面板中将 LDAP 身份验证设置为启用
。
最佳答案
这是容器之间的网络问题,exoPlatform 可以工作,但 Liferay 不能,因为指定的主机 openldap 不存在于其自己的容器中,并且可能无法从那里访问 389 端口。
您可以通过从 Liferay 容器运行以下命令来进行快速检查,而无需运行 java/ldap:
telnet openldap 389
它可能会输出“网络无法访问”,在这种情况下,您需要创建一个网络并将容器连接到该网络>>> How to communicate between Docker containers via "hostname"
关于带有 Liferay 的 LDAP - 存在未知主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55868967/