220 votes

Docker-Compose des données persistantes MySQL

Je n'arrive pas à faire en sorte que les données MySQL persistent si j'exécute $ docker-compose down avec les éléments suivants .yml

version: '2'
services:
  # other services

  data:
    container_name: flask_data
    image: mysql:latest
    volumes:
      - /var/lib/mysql
    command: "true"

  mysql:
    container_name: flask_mysql
    restart: always
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this
      MYSQL_USER: 'test'
      MYSQL_PASS: 'pass'
    volumes_from:
      - data
    ports:
      - "3306:3306"

Je comprends que dans mon data en utilisant volumes: - /var/lib/mysql le fait correspondre au répertoire de mes machines locales où mysql stocke les données dans le conteneur. Grâce à ce mappage, les données devraient persister même si les conteneurs sont détruits. Et le mysql n'est qu'une interface client dans la base de données et peut voir le répertoire local grâce à l'interface de l'utilisateur. volumes_from: - data

J'ai tenté cette réponse et elle n'a pas fonctionné. Trouble des données persistantes de Docker-Compose

EDITAR

J'ai changé mon .yml comme indiqué ci-dessous et créé un répertoire ./data mais maintenant quand je lance docker-compose up --build el mysql Le conteneur ne démarre pas et l'erreur suivante apparaît

  data:
    container_name: flask_data
    image: mysql:latest
    volumes:
      - ./data:/var/lib/mysql
    command: "true"

  mysql:
    container_name: flask_mysql
    restart: always
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this
      MYSQL_USER: 'test'
      MYSQL_PASS: 'pass'
    volumes_from:
      - data
    ports:
      - "3306:3306"

flask_mysql | mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)
flask_mysql | 2016-08-26T22:29:21.182144Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
flask_mysql | 2016-08-26T22:29:21.185392Z 0 [ERROR] --initialize specified but the data directory exists and is not writable. Aborting.

0 votes

12voto

MGLondon Points 730

En complément de la réponse de @Ohmen, vous pourriez également ajouter un external pour créer le volume de données en dehors de docker compose. De cette façon, docker compose ne tentera pas de le créer. De plus, vous n'aurez pas à vous soucier de la perte des données contenues dans le volume de données en cas d'échec de l'opération. $ docker-compose down -v . L'exemple ci-dessous est tiré du page officielle .

version: "3.8"

services:
  db:
    image: postgres
    volumes:
      - data:/var/lib/postgresql/data

volumes:
  data:
    external: true

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X