如何在启动时加载LDAPdocker容器数据

我想在Docker容器上有一个LDAP服务器,我已经使用dinkel / openldap , osixia / openldap和muzili / ldap docker镜像,到目前为止连接和第一次configuration都没问题 。

我的问题是:尽pipe我装载了容器的/ var / lib / ldap&/ etc / ldap,但在停止,杀死或删除(安全删除,没有-v的docker rm)ldap容器之前总是需要备份,失利。 它似乎并没有通过所有的configuration文件,因为它也需要在开始时的数据导入。

我想我可能会遇到docker集装箱和他们的卷安装的一些问题,但其他容器安装是成功的,它似乎只有一个问题与LDAP容器。

有什么解决scheme,使其工作?(configuration在启动时通过读取挂载的文件夹,而不是丢失的数据?)

您可以启动另一个容器来首先备份文件夹。

假设名为ldap的ldap容器有两个卷: /var/lib/ldap & /etc/ldap ,使用下面的命令,可以轻松地进行备份。

 docker run --volumes-from ldap -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /var/lib/ldap /etc/ldap 

如果在运行新的容器时需要input一些configuration,可以考虑用ONBUILD命令更新Dockerfile,比如:

 ONBUILD cp . /etc/ldap ONBUILD COMMAND you'd like to run 

使用上面的代码,你的图像可以保持不变(不需要重新构build),但是当你启动容器时,它将在启动容器时将设置input到/ etc / ldap中,并在此之后运行一些命令。

参考:

pipe理容器中的数据

Dockerfile参考

(解决了!)
要清除解决scheme:
宝马 ldap容器有2个容量,在安装到angular色docker模块安装部分的空文件夹时被移除。
所以我首先运行一个非挂载的ldap容器,并按照宝马的build议备份它。 然后杀死并删除它,并在备份的数据上运行一个全新的容器。 然后,对于用户数据configuration,我运行另一个ldap容器(从相同的图像),只需要从configuration文件注册用户的数据。

最终Ansibleangular色代码:

 - 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"