2

проблема

Использование контейнера данных для хранения данных MySQL не будет работать должным образом, если я смонтирую родительский каталог /var /lib вместо /var /lib /mysql

инфраструктура

Я использую 3 док-контейнера для предоставления веб-сайта:

  • Контейнер nginx для запуска веб-сервера
  • контейнер mariadb для базы данных
  • контейнер данных для созданных пользовательских данных

Контейнер данных создается с помощью следующей команды docker:

$ docker create \
     -v /var/lib \
     -v /var/www \
     --name [appname]-data \
     tianon/true /bin/true

Проверка доступных монтирований для [appname] -data с помощью $ docker inspect [appname]-data:

"Mounts": [
        {
            "Name": "361ed7b3e38371653f2df75652973e1c48db52d59c4c5371f634c1930291af0c",
            "Source": "/var/lib/docker/volumes/361ed7b3e38371653f2df75652973e1c48db52d59c4c5371f634c1930291af0c/_data",
            "Destination": "/var/lib",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        },
        ...

Контейнеры запускаются с помощью docker-compose. Оба контейнера должны использовать все монтирования, доступные в контейнере данных. Мой docker-compose.yml:

[appname]-nginx:
  container_name: [appname]-nginx
  image: nginx:9-apache
  links:
    - [appname]-mariadb:mysql
  volumes_from:
    - [appname]-data
  restart: always
  expose:
    - "80"

[appname]-mariadb:
  image: mariadb:10.1
  container_name: [appname]-mariadb
  restart: always
  volumes_from:
    - [appname]-data
  environment:
    MYSQL_ROOT_PASSWORD: pas$w0rd
    TERM: dumb

Вывод $ docker exec -it [appname]-nginx ls -lha /var/lib/mysql:

total 8.0K
drwxr-xr-x 2 root root 4.0K Jun 27 16:30 .
drwxr-xr-x 3 root root 4.0K Jul 21 10:19 ..

Вывод $ docker exec -it [appname]-mariadb ls -lha /var/lib/mysql:

total 109M
drwxr-xr-x 4 mysql mysql 4.0K Jul 21 10:19 .
drwxr-xr-x 3 root  root  4.0K Jul 21 10:19 ..
-rw-rw---- 1 mysql mysql  16K Jul 21 07:57 aria_log.00000001
-rw-rw---- 1 mysql mysql   52 Jul 21 07:57 aria_log_control
-rw-rw---- 1 mysql mysql  48M Jul 21 07:57 ib_logfile0
-rw-rw---- 1 mysql mysql  48M Jul 21 07:56 ib_logfile1
-rw-rw---- 1 mysql mysql  12M Jul 21 07:57 ibdata1
-rw-rw---- 1 mysql mysql    0 Jul 21 07:56 multi-master.info
drwx------ 2 mysql mysql 4.0K Jul 21 07:57 mysql
drwx------ 2 mysql mysql 4.0K Jul 21 07:56 performance_schema
-rw-rw---- 1 mysql mysql  24K Jul 21 07:57 tc.log

Выполнение mount в обоих контейнерах показывает одинаково:

/dev/dm-0 on /var/lib type ext4 (rw,relatime,data=ordered)
/dev/dm-0 on /var/www type ext4 (rw,relatime,data=ordered)

Однако для [appname] -mariadb есть дополнительное монтирование для /var /lib /mysql:

/dev/dm-0 on /var/lib/mysql type ext4 (rw,relatime,data=ordered)

Вопрос

Почему невозможно создать монтирование тома в /var /lib для сохранения всех сохраненных данных в контейнере данных?

Я что-то пропустил?

Это проблема MySQL / MariaDB?

1 ответ1

0

Почему бы вам не создать свой том докера из docker-compose.yml ? Следующее должно работать:

version: '2'                       

services:                          
  nginx:                           
    image: nginx:9-apache          
    expose:                        
      - '80'                       
    volumes:                       
      - app-data:/var/www          
  mariadb:                         
    image: mariadb:10.1            
    volumes:                       
      - app-data:/var/lib          
    environment:                   
      MYSQL_ROOT_PASSWORD: pas$w0rd
      TERM: dumb                   

volumes:                           
  app-data:

Интересно, почему вы хотите, чтобы оба контейнера хранили свои данные на одном и том же томе? Я полагаю, что предпочтительнее хранить данные nginx и mariadb в отдельных томах.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .