2016-09-21 59 views
0

我一直在考虑为我在服务器上运行的Docker容器设置数据卷。容器是从这个FreePBX图像https://hub.docker.com/r/jmar71n/freepbx/ 基本上我想持久性数据,所以我不会失去我的VoIP扩展和设置在Docker停止的情况下。我已经尝试了很多指南,其中有堆栈溢出,还有Docker的man页面,但我无法完成它的工作。无法为Docker映像设置持久数据量

任何人都可以用我需要运行的命令来帮助我,以便将卷连接到上面链接的FreePBX映像上?

回答

0

您可以通过运行带有-v选项的容器并映射到主机目录来执行此操作 - 只需知道容器存储数据的位置即可。

查看该图像的Dockerfile我假设您感兴趣的数据存储在MySql中。在MySql config容器使用的数据目录是/var/lib/mysql

所以,你可以这样开始你的容器,映射你的主机上的MySQL数据目录/docker/pbx-data

> docker run -d -t -v /docker/pbx-data:/var/lib/mysql jmar71n/freepbx     
20b45b8fb2eec63db3f4dcab05f89624ef7cb1ff067cae258e0f8a910762fb1a 

使用docker inpect,以确认按预期的方式安装映射:

> docker inspect --format '{{json .Mounts}}' 20b          
[{"Source":"/docker/pbx-data", 
"Destination":"/var/lib/mysql", 
"Mode":"","RW":true,"Propagation":"rprivate"}]                 

容器运行时会引导数据库,因此在主机上您将能够看到容器正在使用的MySql数据目录的内容:

> ls -l /docker/pbx-data                
total 28684                    
-rw-r----- 1 103 root   2062 Sep 21 09:30 20b45b8fb2ee.err      
-rw-rw---- 1 103 messagebus 18874368 Sep 21 09:30 ibdata1        
-rw-rw---- 1 103 messagebus 5242880 Sep 21 09:30 ib_logfile0       
-rw-rw---- 1 103 messagebus 5242880 Sep 21 09:30 ib_logfile1       
drwx------ 2 103 root   4096 Sep 21 09:30 mysql         
drwx------ 2 103 messagebus  4096 Sep 21 09:30 performance_schema 

如果杀死容器并使用相同的卷映射运行另一个容器,则它将具有来自先前容器的所有数据文件,并且应该保留您的应用程序状态。

我对FreePBX并不熟悉,但是如果状态存储在其他目录中,您可以在配置中找到位置并将它们映射到主机,方法与多个-v选项一样。

0

嗨,Elton Stoneman和user3608260!

是的,你假设正确的数据保存在Mysql(记录,用户,配置等)。

但是在星号中,所有配置保存在文件'.conf'和类似文件中。

在这种情况下,档案寻找user3608260在 '的/ etc /星号/ *' 的蓄能

你的回答是完全有更多的一个命令:-v/local_to_save:在/ etc /星号

最终搬运工命令:

搬运工运行-d -t -v /搬运工/ PBX-数据:在/ var/lib中/ MySQL的-v /搬运工/ PBX-星号:的/ etc /星号 jmar71n/FreePBX的

[假设/ docker/pbx-asterisk是一个主机目录。 ]