我有一个
docker-compose.yml
文件,它定义了我的开发环境所需的服务。最近,我一直专注于设置两个服务,即osixia/openldap:1.5.0
和osixia/phpldapadmin:0.9.0
图像。
我遇到的问题是:
phpLDAPAdmin
似乎无法连接 LDAP 服务,Can't contact LDAP server (-1) for user
关于第一点,我想了一会儿,问题是否出在我的服务定义条目上,即
restart: unless-stopped|no|never
。我尝试了可接受的值,但没有得到任何不同的行为。
然后我继续研究第二点,因为我认为它可能对第一个问题有影响。检查我的服务日志文件后发现了两个问题。以下是两个错误,它们部分出现在日志文件本身上。
*** DEBUG | 2023-10-27 19:15:01 | LDAP_TLS_KEY_FILENAME = ldap.key
*** DEBUG | 2023-10-27 19:15:01 | LDAP_TLS_VERIFY_CLIENT = never
*** DEBUG | 2023-10-27 19:15:01 | PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
*** DEBUG | 2023-10-27 19:15:01 | SSL_HELPER_AUTO_RENEW_SERVICES_IMPACTED = slapd
*** DEBUG | 2023-10-27 19:15:01 | ------------------------------------------
*** ERROR | 2023-10-27 19:15:01 | /container/run/startup/slapd failed with status 1
*** DEBUG | 2023-10-27 19:15:01 | Run commands before finish...
*** INFO | 2023-10-27 19:15:01 | Killing all processes...
*** INFO | 2023-10-27 19:15:01 | openldap user and group adjustments
*** INFO | 2023-10-27 19:15:01 | get current openldap uid/gid info inside container
*** INFO | 2023-10-27 19:15:01 | -------------------------------------
*** INFO | 2023-10-27 19:15:01 | openldap GID/UID
*** INFO | 2023-10-27 19:15:01 | -------------------------------------
*** INFO | 2023-10-27 19:15:01 | User uid: 911
*** INFO | 2023-10-27 19:15:01 | User gid: 911
*** INFO | 2023-10-27 19:15:01 | uid/gid changed: false
*** INFO | 2023-10-27 19:15:01 | -------------------------------------
*** INFO | 2023-10-27 19:15:01 | updating file uid/gid ownership
*** ERROR | 2023-10-27 19:15:01 | Error: the config directory (/etc/ldap/slapd.d) is empty but not the database directory (/var/lib/ldap)
关于第二点,我有一个想法,将
config.php
文件挂载到容器的 slapd 目录中。问题是我不知道这个文件应该是什么样子。
此外,我已确保在我的服务中添加
LDAP_BASE_DN
,它等于 dc=coolstuff-enterprise,dc=org
域集的 coolstuff-enterprise.org
。
dc=coolstuff-enterprise,dc=org
是用作用户名的正确值吗?slapd
出现状态1错误,可能会出现什么问题?我可能会遇到 LDAP 管理系统的问题,因为我不知道应该使用什么用户名来访问 LDAP 服务。
下面是我的
docker-compose.yml
文件,其中包含相关服务定义、网络和卷。
version: '3.8'
networks:
coolstuff-enterprise-network:
name: coolstuff-enterprise-network
driver: bridge
volumes:
openldap_data:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '${HOME}/server/openldap/data'
openldap_config:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '${HOME}/server/openldap/config'
services:
openldap:
image: osixia/openldap:1.5.0
mem_limit: 128m
container_name: coolstuff-ldap
restart: unless-stopped
volumes:
- openldap_data:/var/lib/ldap
- openldap_config:/var/lib/ldap/slapd.d
environment:
LDAP_ORGANISATION: CoolStuff Enterprise
LDAP_DOMAIN: coolstuff-enterprise.org
LDAP_BASE_DN: "dc=coolstuff-enterprise,dc=org"
LDAP_ADMIN_PASSWORD: admin
LDAP_CONFIG_PASSWORD: config
LDAP_ROOT_PASSWORD: root
LDAP_RFC2307BIS_SCHEMA: "true"
LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"
LDAP_TLS_VERIFY_CLIENT: never
command:
- "--copy-service"
- "--loglevel=debug"
ports:
- 9008:389
- 7636:636
networks:
coolstuff-enterprise-network:
aliases:
- ldap-directory-service
openldap-admin:
image: osixia/phpldapadmin:0.9.0
container_name: coolstuff-ldap-admin
restart: "no"
environment:
PHPLDAPADMIN_LDAP_HOSTS: openldap
PHPLDAPADMIN_HTTPS: "false"
depends_on:
- openldap
ports:
- 9007:80
- 4443:443
networks:
coolstuff-enterprise-network:
aliases:
- openladp-admin
最后,下面我展示了我的
docker-compose ps
命令输出:
┌─[MacBook-Pro][~/devhouse/support/coolstuff-enterprise][feature/ladp-integration 😱]
└──╼ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------------------
coolstuff-admin docker-php-entrypoint php-fpm Up 9000/tcp
coolstuff-admin-nginx /docker-entrypoint.sh ngin ... Up 0.0.0.0:9001->80/tcp
coolstuff-admin-rdbms docker-entrypoint.sh mysqld Up 0.0.0.0:9006->3306/tcp, 33060/tcp
coolstuff-broadcaster node /app/bin/server.js start Up 0.0.0.0:6001->6001/tcp, 0.0.0.0:9601->9601/tcp
coolstuff-idp-service-provider docker-php-entrypoint apac ... Up 80/tcp, 0.0.0.0:9002->8080/tcp
coolstuff-ldap /container/tool/run --copy ... Restarting
coolstuff-ldap-admin /container/tool/run Up 0.0.0.0:4443->443/tcp, 0.0.0.0:9007->80/tcp
coolstuff-rdbms-admin /docker-entrypoint.sh apac ... Up 0.0.0.0:9004->80/tcp
coolstuff-smtp MailHog Up 0.0.0.0:8025->1025/tcp, 0.0.0.0:9005->8025/tcp
所有服务共享相同的
coolstuff-enterprise-network
。
我做错了什么导致我无法参加聚会?这些拼图有我遗漏的东西吗?
关于第一点,我想了一会儿,问题是否出在我的服务定义条目上,即重启:unless-stopped|no|never。我尝试了可接受的值,但没有得到任何不同的行为。
这不是问题。问题不在于您的服务正在重新启动 – 这很好 – 问题在于服务不断退出或崩溃,这实际上就是它被重新启动的原因。该定义仅控制系统如何对服务崩溃做出反应。
在 LDAP 服务的日志文件中,有两个错误可见,但不那么明显我高度怀疑,当容器尝试调用 slapd 将 slapd.conf 转换为新的配置格式时,会发生第一个错误(slapd 作为实际服务启动之前的一个单独步骤)。
第二个错误很可能只是第一个错误的后果(即配置目录为空,因为配置转换失败)。
phpLDAPAdmin 似乎无法连接 LDAP 服务,引用“无法联系用户的 LDAP 服务器 (-1)”是的,因为还没有
LDAP 服务。忽略 phpLDAPAdmin**,直到您弄清楚服务无法启动的原因 - 在此之前,关注连接是没有意义的。
dc=coolstuff-enterprise,dc=org 是用作用户名的正确值吗?是的,如果您想以“rootDN”(即可以无限制访问主数据库的内置帐户)身份登录,那么用户名(绑定 DN)通常是数据库的根 DN。
Docker 镜像很可能会创建一个单独的管理员帐户(也具有配置访问权限),但最终 OpenLDAP 中的所有用户名都是 DN 形式。
如果 slapd 错误状态为 1,可能会出现哪些问题?
数百个;太多了,无法一一列举。当 Docker 映像生成 slapd.conf 或其他内容时,这可能只是一个语法错误。您可能需要找到其余 slapd 日志的放置位置,和/或使其使用适当的
-d
(调试)选项运行 slapd。
我可能会遇到 LDAP 管理系统的问题,因为我不知道应该使用什么用户名来访问 LDAP 服务。尚未运行。不,您遇到这些问题是因为您的 LDAP 服务