example - docker-compose mysql volume
Docker-Componer datos persistentes MySQL (4)
Debe crear un volumen separado para los datos de mysql.
Entonces se verá así:
volumes_from:
- data
volumes:
- ./mysql-data:/var/lib/mysql
Y no,
/var/lib/mysql
es una ruta dentro de su contenedor mysql y no tiene nada que ver con una ruta en su máquina host.
Su máquina host puede incluso no tener mysql en absoluto.
Entonces, el objetivo es conservar una carpeta interna de un contenedor mysql.
Parece que no puedo lograr que los datos de MySQL persistan si ejecuto
$ docker-compose down
con el siguiente
.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"
Tengo entendido que en mi contenedor de
data
usando
volumes: - /var/lib/mysql
asigna al directorio de mi máquina local donde mysql almacena datos en el contenedor y debido a esta asignación, los datos deberían persistir incluso si los contenedores se destruyen.
Y el contenedor
mysql
es solo una interfaz de cliente en el db y puede ver el directorio local debido a
volumes_from: - data
Intenté esta respuesta y no funcionó. Problema de datos persistentes de Docker-Compose
EDITAR
Cambié mi
.yml
como se muestra a continuación y creé un directorio
./data
pero ahora cuando ejecuto
docker-compose up --build
the
mysql
container no comenzará
docker-compose up --build
el error diciendo
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.
El contenedor de datos es una solución superflua.
Data-volumes
harían el truco por usted.
docker-compose.yml
su
docker-compose.yml
para:
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 creará el volumen por usted en la carpeta
/var/lib/docker/volumes
volume.
Este volumen persiste mientras no esté escribiendo
docker-compose down -v
En realidad, esta es la ruta y debe mencionar una ruta válida para que esto funcione.
Si su directorio de datos está en el directorio actual, en lugar de
my-data
, debe mencionar
./my-data
, de lo contrario, también le dará ese error en
mysql
y
mariadb
.
volumes:
./my-data:/var/lib/mysql
Hay 3 formas:
Primera forma
Debe especificar el directorio para almacenar datos mysql en su máquina host . Luego puede eliminar el contenedor de datos. Sus datos mysql se guardarán en su sistema de archivos local.
La definición del contenedor Mysql debe verse así:
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"
Segunda forma
Sería confirmar el contenedor de datos antes de escribir
docker-compose down
:
docker commit my_data_container
docker-compose down
Tercera forma
También puede usar
docker-compose stop
lugar de
docker-compose down
(entonces no necesita confirmar el contenedor)