[docker] 도커 작성 영구 데이터 MySQL

$ docker-compose down다음을 실행하면 MySQL 데이터를 유지할 수없는 것 같습니다..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

이 답변을 시도했지만 작동하지 않았습니다. 도커 작성 영구 데이터 문제

편집하다

내을 변경 .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


답변

세 가지 방법이 있습니다.

첫 번째 방법

호스트 머신 에 mysql 데이터를 저장할 디렉토리를 지정해야 합니다 . 그런 다음 데이터 컨테이너를 제거 할 수 있습니다. mysql 데이터는 로컬 파일 시스템에 저장됩니다.

MySQL 컨테이너 정의는 다음과 같아야합니다.

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:
 - /opt/mysql_data:/var/lib/mysql
ports:
  - "3306:3306"

두 번째 방법

입력하기 전에 데이터 컨테이너를 커밋하는 것입니다 docker-compose down.

docker commit my_data_container
docker-compose down

세번째 방법

또한 docker-compose stop대신 사용할 수 있습니다 docker-compose down(컨테이너를 커밋 할 필요가 없습니다)


답변

mysql 데이터에 대해 별도의 볼륨을 만들어야합니다.

따라서 다음과 같이 보일 것입니다 :

volumes_from:
  - data
volumes:
  - ./mysql-data:/var/lib/mysql

그리고 아니오, /var/lib/mysqlmysql 컨테이너 내부의 경로이며 호스트 컴퓨터의 경로와 관련이 없습니다. 호스트 머신에는 mysql이 전혀 없을 수도 있습니다. 따라서 목표는 mysql 컨테이너에서 내부 폴더를 유지하는 것입니다.


답변

실제로 이것은 경로이며 이것이 작동하려면 유효한 경로를 언급해야합니다. 데이터 디렉토리가 다음 대신 현재 디렉토리에있는 경우 my-data당신이 언급해야한다 ./my-data, 그렇지 않으면 당신에게 그 오류를 줄 것이다 mysqlmariadb도.

volumes:
 ./my-data:/var/lib/mysql


답변