在Docker容器内部使用ldap

时间:2019-06-10 10:01:10

标签: php docker ldap docker-container

我有2个Docker容器。在第一个docker-container内部是我的php-7.3.4,apache2的灯应用程序;第二个是mysql数据库。

我尝试将ldap服务器连接到第一个容器中。我进入“测试项目”文件夹并配置了custom_config.inc.php

 $tlCfg->authentication['method'] = 'LDAP';

 $tlCfg->authentication['ldap_server'] = 'ldap.xyz.com';
 $tlCfg->authentication['ldap_port'] = '389';
 $tlCfg->authentication['ldap_version'] = '3';
 $tlCfg->authentication['ldap_root_dn'] = 'dc=xyz,dc=com';
 $tlCfg->authentication['ldap_bind_dn'] = 'uid=tl,ou=staff,dc=xyz,dc=com';
 $tlCfg->authentication['ldap_bind_passwd'] = 'XYZw';
 $tlCfg->authentication['ldap_tls'] = false; // true -> use tls

在我尝试通过ldap凭据登录到网页并抛出http错误500

当我查看日志时,我得到了:

错误:        https://imgur.com/a/HQEZT3X

PHP Fatal error: Uncaught Error: Call to undefined function 
ldap_connect() in 
var/www/html/testlink/lib/functions/ldap_api.php:42\nStack trace :\n#0                     
/var/www/html/testlink/functions/ldap_api.php(165): 
ldap_connect_bind(Array)\n#1 
var/www/html/testlink/lib/functions/doAuthorize.php(200): 
ldap_authenticate('test_user', 'test')\n#2 
var/www/html/testlink/lib/functions/doAuthorize.php(90): 
auth_does_password_match(Object(tlUser), 'test')\n#3 
var/www/html/testlink/login.php(45): doAuthorize(Object(database), 
'test_user', 'test', Object(stdClass))\n#4 {main}\n thrown in 
var/www/html/testlink/lib/functions/ldap_api.php on line 42, refer: 
http://***.**.com/login.php

如何配置ldap?

2 个答案:

答案 0 :(得分:1)

您需要将以下行放入您的php Dockerfile

RUN apt-get update && apt-get install -y \
    libldap2-dev

RUN docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/
RUN docker-php-ext-install ldap

答案 1 :(得分:0)

您的Apache / PHP容器缺少PHP LDAP扩展名。您将需要重新构建该容器,使其包含PHP LDAP扩展,或者您需要使用https://packagist.org/packages/freedsx/LDAP之类的Userland LDAP库(从未使用过,因此无法对此说什么)。请注意,Userland库使用的API与PHP扩展使用的API不同,因此您将需要重写代码。因此,最终重建容器可以是更简单的解决方案。