docker - 如何在启动时加载 LDAP docker 容器数据

标签 docker ldap config openldap

我想在 docker 容器上拥有一个 LDAP 服务器,我已经使用了 dinkel/openldap , osixia/openldapmuzili/ldap docker images 和到目前为止的连接和第一个配置是好的。

我的问题是:虽然我安装了容器的/var/lib/ldap 和/etc/ldap,但在停止、杀死或删除(安全删除,没有 -v 的 docker rm)之前总是需要备份,否则会有数据损失。而且它似乎没有遍历所有配置文件,因为它还需要在开始时导入数据。

我想我可能会在 docker 容器及其卷安装方面遇到一些问题,但其他所有容器安装都是成功的,而且似乎只有 ldap 容器有问题。

有什么解决方案可以让它工作吗?(在启动时通过读取已安装的文件夹而不丢失数据进行配置?)

最佳答案

(解决了!)

要清除解决方案:
喜欢 BMW 的回答ldap 容器有 2 个卷,在安装到 ansible 角色 docker 模块安装部分的空文件夹时被删除。所以我首先运行一个未安装的 ldap 容器并按照 BMW 的建议备份它的卷。 .然后杀死并删除它并在备份数据上运行一个全新的容器。然后对于用户数据配置,我运行另一个 ldap 容器(来自同一图像),它只需要从配置文件中注册用户数据。

最终 Ansible 角色代码:

- name: run temporary ldap container
  docker:
    image: muzili/ldap
    name: temporary-ldap
    hostname: temporary-ldap
    state: restarted
    ports: 389:389
    env:
      SLAPD_PASSWORD: ******
      SLAPD_DOMAIN: dev.domain.com
- name: ldap data copy container
  docker:
    image: ubuntu
    name: backup_agent
    state: started
    volumes:
    - /backup
    volumes_from:
    - temporary-ldap
    command: tar cvf /backup/backup.tar  /var/lib/ldap  /etc/ldap
- name: copy compressed data from backup_agent
  command: /usr/bin/docker cp backup_agent:/backup/backup.tar "{{base_dir}}/ldap/import"
- name: extract ldap configuration data
  unarchive:
    copy: "no"
    src: "{{base_dir}}/ldap/import/backup.tar"
    dest: "{{base_dir}}/ldap"
- name: kill temporary ldap container
  docker:
    image: muzili/ldap
    name: temporary-ldap
    state: absent
- name: run main ldap container
  docker:
    image: muzili/ldap
    name: ldap-server
    hostname: ldap-server
    state: running
    ports: 389:389
    env:
      SLAPD_PASSWORD: ******
      SLAPD_DOMAIN: dev.domain.com
    volumes:
    - "{{base_dir}}/ldap/etc/ldap:/etc/ldap"
    - "{{base_dir}}/ldap/var/lib/ldap:/var/lib/ldap"
- name: wait for container to start
  wait_for:
    port: 389
    delay: 5
- name: copy ldap data configuration file
  copy:
    src: conf/
    dest: "{{base_dir}}/ldap/import/conf"
- name: run ldap-importer container
  docker:
    image: muzili/ldap
    name: ldap-importer
    hostname: ldap-importer
    state: started
    volumes:
    - "{{base_dir}}/ldap/import/conf:/etc/ldap/conf"
    command: "ldapadd -h ldap-server -c -x -D \"cn=admin,dc=dev,dc=domain,dc=com\" -w ****** -f /etc/ldap/conf/data.ldif"
    links:
    - "ldap-server"

关于docker - 如何在启动时加载 LDAP docker 容器数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32623481/

相关文章:

docker - 如何绕过 Docker 对符号链接(symbolic link)使用的限制?

asp.net - 无法从 docker 支持的 asp.net core 项目连接到 sql server

python - 与 Flask 集成时 Ldap 模块失败

java - Docker tomcat 编辑扩展的 war 文件

django - 使用docker时无法从Django访问安装目录

c# - 使用 C# 获取 Active Directory 用户数据

spring-security - 在 spring security(spring-boot 项目)中使用 ldap 凭据进行 Http 基本身份验证以保护其余服务调用

reactjs - Webpack 模块解析失败。加载器 react 和巴别塔

java - 语音到文本翻译所需的 Sphinx4 配置

.net - WCF 即服务 : Modifying app. 配置文件