Возникли проблемы с настройкой постоянного тома данных для образа Docker

Я пытался настроить том данных для контейнера Docker, который я запускаю на своем сервере. Контейнер взят из этого образа FreePBX https://hub.docker.com/r/jmar71n/freepbx/ По сути, мне нужны постоянные данные, чтобы не потерять свои расширения и настройки VoIP в случае остановки Docker. Я пробовал много руководств, здесь по переполнению стека и на справочных страницах Docker, но я просто не могу заставить его работать.

Может ли кто-нибудь помочь мне с тем, какие команды мне нужно выполнить, чтобы подключить том к образу FreePBX, который я связал выше?


person user3608260    schedule 21.09.2016    source источник


Ответы (2)


Вы можете сделать это, запустив контейнер с параметром -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.

person Elton Stoneman    schedule 21.09.2016

Привет, Элтон Стоунман и пользователь 3608260!

Да, вы правильно предполагаете для сохранения данных в Mysql (записи, пользователи, конфиги и т.д.).

Но в астериске все конфигурации сохраняются в файлах '.conf' и им подобных.

В этом случае искомые архивы пользователя 3608260 хранятся в '/etc/asterisk/*'.

Ваш ответ прекрасно сочетается с еще одной командой: -v /local_to_save:/etc/asterisk

последняя команда докера:

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

[Предположим, что /docker/pbx-asterisk — это хост-каталог. ]

person Renato siqueira    schedule 23.01.2018