You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器中OpenLDAP导入LDIF文件报错:文件不存在

问题:向Docker OpenLDAP容器添加条目时提示文件不存在

执行以下命令尝试向Docker容器内的OpenLDAP服务器添加条目:

docker exec -it openldap ldapadd -x -w "adminpw" -D "cn=admin,dc=exemple,dc=com" -f ${PWD}/ldif/file.ldif

出现错误:

file.ldif: No such file or directory

已确认本地${PWD}/ldif/file.ldif路径有效,以下是我的docker-compose配置:

openldap:
  image: osixia/openldap:latest
  container_name: openldap
  hostname: ldap-server
  ports: 
    - "390:390"
    - "636:636"
  volumes:
    - ./data/certificates:/container/service/slapd/assets/certs
    - ./data/slapd/database:/var/lib/ldap
    - ./data/slapd/config:/etc/ldap/slapd.d
  environment: 
    - LDAP_ORGANISATION=supplychain
    - LDAP_DOMAIN=supplychain.com
    - LDAP_ADMIN_USERNAME=admin
    - LDAP_ADMIN_PASSWORD=adminpw
    - LDAP_CONFIG_PASSWORD=config_pass
    - "LDAP_BASE_DN=dc=exemple,dc=com" #cn=admin,dc=exemple,dc=com  
    - LDAP_TLS_CRT_FILENAME=server.crt
    - LDAP_TLS_KEY_FILENAME=server.key
    - LDAP_TLS_CA_CRT_FILENAME=exemple.com.ca.crt
  networks: 
    - supplychain

phpldapadmin:
  image: osixia/phpldapadmin:latest
  container_name: phpldapadmin
  hostname: phpldapadmin
  ports: 
    - "81:80"
  environment: 
    - PHPLDAPADMIN_LDAP_HOSTS=openldap
    - PHPLDAPADMIN_HTTPS=false
  depends_on:
    - openldap
  networks: 
    - supplychain
解决方法

出现这个错误的核心原因是容器内无法访问本地的LDIF文件,因为你没有把存放LDIF文件的目录挂载到容器中。

  • 步骤1:修改docker-compose.yml,添加LDIF目录挂载
    在openldap服务的volumes部分,新增一行挂载规则,把本地的ldif目录映射到容器内的某个路径(比如/container/service/slapd/assets/ldif):

    volumes:
      - ./data/certificates:/container/service/slapd/assets/certs
      - ./data/slapd/database:/var/lib/ldap
      - ./data/slapd/config:/etc/ldap/slapd.d
      - ./ldif:/container/service/slapd/assets/ldif  # 新增这一行
    
  • 步骤2:重启OpenLDAP容器
    执行命令重新启动容器,让挂载生效:

    docker-compose down && docker-compose up -d
    
  • 步骤3:修改ldapadd命令,使用容器内的文件路径
    现在容器内已经能访问到LDIF文件了,把命令里的文件路径换成容器内的路径:

    docker exec -it openldap ldapadd -x -w "adminpw" -D "cn=admin,dc=exemple,dc=com" -f /container/service/slapd/assets/ldif/file.ldif
    
  • 备选方案:不挂载目录,直接通过管道传入LDIF内容
    如果不想修改docker-compose配置,也可以直接把本地LDIF文件的内容通过管道传给容器内的ldapadd命令:

    cat ${PWD}/ldif/file.ldif | docker exec -i openldap ldapadd -x -w "adminpw" -D "cn=admin,dc=exemple,dc=com"
    

    注意这里要把-it换成-i,因为不需要交互式终端,只需要标准输入。

内容的提问来源于stack exchange,提问作者Nassreddine MEKKI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:48:41