Docker-Composer Problème Persistant De Données

j'ai du mal à configurer les données persistantes avec Mariadb . J'utilise docker-compose , avec chaque service dans un seul conteneur ( Nginx , PHP-FPM et Mariadb ). Tout fonctionne, sauf Mariadb qui ne stocke pas de données. Chaque fois que je redémarre le conteneur, je perds toutes les données. Puis j'ai découvert que je pouvais utiliser un autre conteneur juste pour garder des données, et il n'a même pas besoin d'être en cours d'exécution.

donc j'utilise, dans Mariadb conteneur volume_from conteneur de contenu. Mais quand je fais cela, quand j'essaie de cartographier le volume /var/lib/mysql , le conteneur MariaDb ne démarre pas.

Erreur

2015-12-29 12: 16:40 7f2f02e4a780

InnoDB: erreur de système D'exploitation numéro 13 dans une opération de fichier.

InnoDB: l'erreur signifie que mysqld n'a pas les droits d'accès à

InnoDB: le répertoire.

l'erreur se réfère à un problème sur les permissions de volume, mais j'ai essayé de définir les permissions à travers Dockerfile dans les deux conteneurs, et le problème persiste. Je suis un peu perdu. J'utilise OSX, donc je crois que c'est un problème OSX. Quelqu'un peut-il m'aider sur ce point?

C'est mon code:

Mon Docker Compose

content:
  build: containers/content
  container_name: content
  hostname: content
  volumes:
    - /var/lib/mysql
mariadb:
  build: containers/mariadb
  container_name: mariadb
  hostname: mariadb
  ports:
    - "3306:3306"
  volumes_from:
    - content
  environment:
    - MYSQL_ROOT_PASSWORD=mariadb
    - TERM=xterm
    - PORT=3306

MariaDB Dockerfile

FROM debian:jessie

RUN apt-get update && apt-get install -y  mariadb-server

EXPOSE 3306

Content Dockerfile

FROM debian:jessie

VOLUME /var/lib/mysql

CMD ["true"]
6
demandé sur Siyual 2015-12-29 15:43:17

1 réponses

la façon dont je le fais est que j'utilise busybox pour toutes les données stockées et partagées avec mariadb. Ensuite, utilisez --volumes-from dans mariadb pour lier ces répertoires. Jetez un oeil dans mon simpified "151940920 de fichier".

db-data:
  container_name: db-data
  image: busybox:latest
  volumes:
    - /data/mysql:/var/lib/mysql

db:
  container_name: db
  image: million12/mariadb
  restart: always
  volumes_from:
    - db-data
  environment:
    - MARIADB_USER=admin
    - MARIADB_PASS=my_pass

maintenant tous les fichiers de base de données sont accessibles sur OS hôte aussi et il ne devrait pas y avoir de problèmes de permissions.

mise à jour pour docker-composer 2.0

version: '2'
volumes:
  database:

services:
  db:
    container_name: db
    image: million12/mariadb
    restart: always
    volumes_from:
       - database
     environment:
       - MARIADB_USER=admin
       - MARIADB_PASS=my_pass

vous pouvez voir où docker stocke que volume sur votre disque dur en exécutant la commande:

docker volume inspect docker_database

[
{
    "Name": "docker_database",
    "Driver": "local",
    "Mountpoint": "/var/lib/docker/volumes/docker_database/_data",
    "Labels": null,
    "Scope": "local"
}

]

8
répondu Polinux 2016-09-22 18:55:07