无法为Docker镜像设置持久数据卷

时间:2016-09-21 08:37:29

标签: docker containers volume persistent

我一直在研究为我在服务器上运行的Docker容器设置数据卷。容器来自此FreePBX图像https://hub.docker.com/r/jmar71n/freepbx/ 基本上我想要持久数据,所以在Docker停止的情况下我不会丢失我的VoIP扩展和设置。我已经尝试过很多指南,其中有关于堆栈溢出的指南,以及Docker联机帮助页,但我无法让它工作。

任何人都可以帮助我运行我需要运行的命令,以便将卷附加到我上面链接的FreePBX图像上吗?

2 个答案:

答案 0 :(得分: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,但是如果状态存储在其他目录中,您可以在config中找到位置并以相同的方式将它们映射到主机,具有多个-v选项。 / p>

答案 1 :(得分:0)

嗨Elton Stoneman和user3608260!

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

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

在这种情况下,所查找的档案用户3608260存储在' / etc / asterisk / *'

你的答案完全符合一个命令:-v / local_to_save:/ etc / asterisk

最终的docker命令:

docker run -d -t -v / docker / pbx-data:/ var / lib / mysql -v / docker / pbx-asterisk:/ etc / asterisk jmar71n / freepbx

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