OpenLDAP 和 phpLDAPAdmin 无法按预期与 Docker Compose 一起工作

问题描述 投票:0回答:1

我有一个

docker-compose.yml
文件,它定义了我的开发环境所需的服务。最近,我一直专注于设置两个服务,即
osixia/openldap:1.5.0
osixia/phpldapadmin:0.9.0
图像。

我遇到的问题是:

  • LDAP 服务不是UP,而是继续重新启动
  • 在 LDAP 服务的日志文件中,有两个错误可见,但不那么明显
  • 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

我做错了什么导致我无法参加聚会?这些拼图有我遗漏的东西吗?

php docker docker-compose ldap openldap
1个回答
0
投票

关于第一点,我想了一会儿,问题是否出在我的服务定义条目上,即重启: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 服务
尚未运行。

© www.soinside.com 2019 - 2024. All rights reserved.