1. ホーム

[解決済み】Docker-Compose 永続化データ MySQL

2022-04-11 23:54:51

質問

を実行すると、MySQLのデータが永続化されないようです。 $ docker-compose down を次のように変更します。 .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"

私の理解では、私の data を使用したコンテナ volumes: - /var/lib/mysql は、mysqlがコンテナにデータを保存するローカルマシンのディレクトリにマッピングし、このマッピングのおかげで、コンテナが破壊されてもデータが持続するはずです。また mysql コンテナは、データベースへの単なるクライアントインターフェイスであり、ローカルディレクトリを見ることができます。 volumes_from: - data

この回答を試みても、うまくいきませんでした。 Docker-Compose 永続化データのトラブルについて

EDIT

を変更しました。 .yml というディレクトリを作成し ./data を実行したところ docker-compose up --buildmysql コンテナが起動しない場合、次のようなエラーがスローされます。

  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.

解決方法は?

データコンテナは余分な回避策です。 データボリューム を使えば、うまくいくはずです。あなたの docker-compose.yml に変更します。

version: '2'
services:
  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:
      - my-datavolume:/var/lib/mysql
volumes:
  my-datavolume:

Dockerは、ボリュームを /var/lib/docker/volumes フォルダーに格納されます。このボリュームは、あなたが docker-compose down -v