도커-영구 데이터 MySQL 구성
실행하면 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
mapping은 mylocal machine directory에 mapping을 하는데, 거기서 mysql은 컨테이너에 데이터를 저장하기 때문에 컨테이너가 파괴되어도 데이터는 지속되어야 합니다.그리고.mysql
컨테이너는 단지 DB에 클라이언트 인터페이스일 뿐이고 로컬 디렉토리를 볼 수 있습니다.volumes_from: - data
이 답변을 시도했지만 효과가 없었습니다.Docker-Compose 영구 데이터 문제
편집
내가 바뀌었습니다..yml
아래와 같이 dir를 만들었습니다../data
하지만 지금 내가 뛸때docker-compose up --build
그mysql
컨테이너가 다음과 같은 오류를 시작하지 않습니다.
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:
도커가 볼륨을 생성할 것입니다./var/lib/docker/volumes
폴더.이 볼륨은 입력하지 않는 한 지속됩니다.docker-compose down -v
3가지 방법이 있습니다.
퍼스트웨이
호스트 시스템에 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
제3길
사용할 수도 있습니다.docker-compose stop
대신에docker-compose down
(그러면 컨테이너를 커밋할 필요가 없습니다.)
먼저, 당신은 모든 오래된 mysql 데이터를 삭제해야 합니다.
docker-compose down -v
그런 다음 도커에 두 줄을 추가합니다. yml.
volumes:
- mysql-data:/var/lib/mysql
그리고.
volumes:
mysql-data:
당신의 마지막 도커-docker-dock.yml은 다음과 같이 보일 것입니다.
version: '3.1'
services:
php:
build:
context: .
dockerfile: Dockerfile
ports:
- 80:80
volumes:
- ./src:/var/www/html/
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- mysql-data:/var/lib/mysql
adminer:
image: adminer
restart: always
ports:
- 8080:8080
volumes:
mysql-data:
그 후 이 명령을 사용합니다.
docker-compose up -d
이제 데이터가 영구적으로 유지되고 이 명령을 사용해도 삭제되지 않습니다.
docker-compose down
extra:- 하지만 모든 데이터를 삭제하려면 다음을 사용합니다.
docker-compose down -v
mysql 데이터를 위해 별도의 볼륨을 만들어야 합니다.
따라서 다음과 같이 나타납니다.
volumes_from:
- data
volumes:
- ./mysql-data:/var/lib/mysql
그리고 아니요./var/lib/mysql
는 mysql 컨테이너 내부의 경로이며 호스트 시스템의 경로와는 무관합니다.호스트 시스템에 mysql이 아예 없을 수도 있습니다.따라서 mysql 컨테이너에서 내부 폴더를 유지하는 것이 목표입니다.
@Ohmen의 답변에 추가하여 다음을 추가할 수 있습니다.external
플래그를 지정하여 도커 구성 외부에 데이터 볼륨을 만듭니다.도커가 이 방식으로 작성하면 작성이 시도되지 않습니다.또한 데이터 볼륨 내부의 데이터가 손실될 우려도 없습니다.$ docker-compose down -v
. 아래 예시는 공식 페이지에서 나온 것입니다.
version: "3.8"
services:
db:
image: postgres
volumes:
- data:/var/lib/postgresql/data
volumes:
data:
external: true
실제로 이것이 경로이며 이것이 작동하려면 유효한 경로를 언급해야 합니다.재에는우가신f 대신my-data
당신은 언급해야 합니다../my-data
은 에게 를 입니다 입니다 를 은 에게 mysql
그리고.mariadb
208.
volumes:
./my-data:/var/lib/mysql
실현 가능한 바인딩 마운트 솔루션:
mariadb:
image: mariadb:latest
restart: unless-stopped
environment:
- MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
volumes:
- type: bind
source: /host/dir
target: /var/lib/mysql
저의 경우 'mysql'이라는 볼륨을 탑재했는데 이 단어는 예약되어 있습니다! 생각해보세요!
언급URL : https://stackoverflow.com/questions/39175194/docker-compose-persistent-data-mysql
'programing' 카테고리의 다른 글
Angular App은 새 배포 후 캐시를 삭제해야 함 (0) | 2023.09.11 |
---|---|
mysql의 날짜별 데이터에서 월별 행 수 가져오기 (0) | 2023.09.11 |
안드로이드에서 보기가 보이는지 확인하려면 어떻게 해야 합니까? (0) | 2023.09.06 |
ID에 점이 포함되어 있을 때 jquery로 ID별 html 노드를 선택하는 방법은? (0) | 2023.09.06 |
MariaDB가 절차에서 삽입 실행을 수행하지 않습니다. (0) | 2023.09.06 |