我一直在研究为我在服务器上运行的Docker容器设置数据卷。容器来自此FreePBX图像https://hub.docker.com/r/jmar71n/freepbx/ 基本上我想要持久数据,所以在Docker停止的情况下我不会丢失我的VoIP扩展和设置。我已经尝试过很多指南,其中有关于堆栈溢出的指南,以及Docker联机帮助页,但我无法让它工作。
任何人都可以帮助我运行我需要运行的命令,以便将卷附加到我上面链接的FreePBX图像上吗?
答案 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是主机目录。 ]