Basado en la investigación de @dekin, hice esto para resolver el problema:
Dockerfile:
FROM mysql:latest
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
CMD ["--datadir", "/var/lib/mysql-no-volume"]
Construir y ejecutar:
docker build . -t my-mysql
docker run -e MYSQL_ROOT_PASSWORD=root -it my-mysql
Basado en la respuesta de @Robert, terminé con este Dockerfile
:
FROM mysql:5.6.22
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
RUN sed -i -e "s|/var/lib/mysql|/var/lib/mysql-no-volume|" /etc/mysql/my.cnf
El CMD
override no funcionó para mí, el contenedor se detuvo con un error extraño:
2019-02-21 15:18:50 1 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Table 'mysql.plugin' doesn't exist
2019-02-21 15:18:50 1 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
Supongo que el CMD
original El comando estaba haciendo más cosas que ahora faltan (en la respuesta de @Robert), así que lo hice con un enfoque diferente. No lo probé con latest
pero creo que debería funcionar.
Si está utilizando docker-compose
, no es necesario crear una imagen personalizada. Simplemente agregue la bandera --datadir=/var/lib/mysql-no-volume
a su comando al tirar del mysql
imagen.
Ejemplo:
version: '2.4'
services:
mysql:
image: mysql:5.7
command: "mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --datadir=/var/lib/mysql-no-volume"
La imagen oficial de mysql almacena datos en un volumen. Normalmente, esto se desea para que sus datos puedan persistir más allá de la vida útil de su contenedor, pero los volúmenes de datos pasan por alto el sistema de archivos de unión y no se comprometen con la imagen.
Puede lograr lo que está tratando de hacer creando su propia imagen base mysql sin volúmenes. Luego podrá agregar datos y confirmarlos en una imagen, pero cualquier dato agregado a un contenedor en ejecución después de la confirmación se perderá cuando el contenedor desaparezca.