2015-12-29 20 views
6

Mam problemy z konfigurowaniem trwałych danych za pomocą Mariadb. Używam docker-compose, z każdą usługą w jednym kontenerze (Nginx, PHP-FPM i Mariadb). Wszystko działa, z tym wyjątkiem, że Mariadb nie przechowuje danych. Za każdym razem, gdy restartuję kontener, tracę wszystkie dane. Wtedy dowiedziałem się, że mogę użyć innego kontenera tylko po to, aby zachować dane, a to nawet nie musi być uruchomione.Docker-Compose Trwałe problemy z danymi

Używam kontenera kontenera volume_from. Ale kiedy to robię, kiedy próbuję odwzorować tom /var/lib/mysql, kontener nie jest uruchamiany.

Błąd

2015-12-29 12:16:40 7f2f02e4a780
InnoDB: System operacyjny numer błędu 13 w operacji pliku.
InnoDB: Błąd oznacza, że ​​mysqld nie ma praw dostępu do
InnoDB: katalog.

Błąd dotyczy problemu z uprawnieniami do wolumenu, ale próbowałem ustawić uprawnienia przez Dockerfile w obu kontenerach, a problem będzie nadal występował. Jestem trochę zagubiony. Używam OSX, więc uważam, że jest to problem z OSX. Czy ktokolwiek może mi z tym pomóc?

To jest mój kod:

My 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"] 

Odpowiedz

8

Sposób, w jaki to robię, polega na tym, że używam busybox dla wszystkich danych przechowywanych i udostępnianych mariadb. Następnie użyj --volumes-from w mariadb, aby połączyć te katalogi. Obejrzyj mój uproszczony plik compose.yml.

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 

Teraz wszystkie pliki bazy danych są dostępne także na hoście i nie powinno być żadnych problemów z uprawnieniami.

Aktualizacja doker-komponować 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 

można zobaczyć, gdzie doker jest przechowywanie tego woluminu na dysku twardym, uruchamiając komendę:
docker volume inspect docker_database

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

]

+0

Dzięki I spróbuję tego. –

+0

Zadziałało.Stworzyłem swój własny plik dokowany do Mariadb (nie jest źle, ale mocniej), a ja używałem dockera rm za każdym razem, gdy zamykałem Dockera. Ale teraz, z tym obrazem, który się nie zdarza. Problem nie został dokładnie rozwiązany, ale jest to również dobre rozwiązanie. –

+3

Ten artykuł sugeruje, że należy użyć tego samego obrazu dla kontenerów db i pojemników z danymi: http://container42.com/2014/11/18/data-only-container-madness/ – toast38coza