Обновление MySQL базы Docker

Ранее не работал с Docker и еще не до конца понимаю принцип его работы.

В контейнере на докере я запустил mysql сервер, phpmyadmin и metabase.

База MySQL, которая находится в /var/lib/mysql постоянно обновляется, но в Docker это хранится в отдельном каталоге, по пути: /var/lib/docker/volumes/metabase_dbdata/_data

При перезапуске Docker командой docker-compose up -d он не обновляет базу в /var/lib/docker/volumes/metabase_dbdata/_data, а именно её я вижу в PMA.

Мне нужно, чтобы при каждом перезапуске (docker-compose up -d) он сопостовлял данные из /var/lib/docker/volumes/metabase_dbdata/_data с данными из /var/lib/mysql и обновлял их

Возможно, я неправильно понял принцип работы Docker или использую не ту команду?

docker-compose.yml

version: '3.1'

services:
  db:
    image: mysql:8.0
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: ####
      MYSQL_DATABASE: ###
      MYSQL_USER: ####
      MYSQL_PASSWORD: ###
    ports:
      - "6033:3306"
    volumes:
      - dbdata:/var/lib/mysql
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: pma
    links:
      - db
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
      PMA_ARBITRARY: 1
    restart: always
    ports:
      - 8081:80
    environment:
      MB_SITE_URL: http://localhost:8081/pma/
  metabase:
    image: metabase/metabase:latest
    ports:
      - "127.0.0.1:3025:3025"
    volumes:
      - data:/metabase
    environment:
      MB_SITE_URL: http://localhost:3000/metabase/

volumes:
  dbdata:
  data:

Ответы (1 шт):

Автор решения: alexsteeel

Здесь Связь сервисов в docker-compose есть варианты того, как можно объединить docker-контейнеры в сеть. Если объединять контейнеры через links, то у metabase тоже должна быть ссылка на БД. И для links и для network обращение к другому контейнеру выполняется по доменному имени (имени контейнера) и порту, например, phpmyadmin:80.

Соответственно, нужно связать metabase с mysql, например так:

version: '3.1'

services:
  db:
    image: mysql:8.0
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: dbmetabaserootpassword
      MYSQL_DATABASE: metabase
      MYSQL_USER: metabase
      MYSQL_PASSWORD: metabasedatabasepassword
    ports:
      - 6033:3306
    volumes:
      - dbdata:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: pma
    links:
      - db
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
      PMA_ARBITRARY: 1
    restart: always
    ports:
      - 8081:80
      
  metabase:
    image: metabase/metabase:latest
    ports:
      - 3001:3000
    volumes:
      - data:/metabase
    environment:
      MB_DB_TYPE: mysql
      MB_DB_DBNAME: metabase
      MB_DB_PORT: 3306
      MB_DB_USER: metabase
      MB_DB_PASS: metabasedatabasepassword
      MB_DB_HOST: db
    depends_on:
      - db
    links:
      - db

volumes:
  dbdata:
  data:

P.S. Пример переменных окружения взял отсюда Docker compose for metabase and mysql, сам с metabase не работал.

→ Ссылка