Sur la base de la recherche @dekin, j'ai fait ceci pour résoudre le problème :
Fichier Docker :
FROM mysql:latest
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
CMD ["--datadir", "/var/lib/mysql-no-volume"]
Créer et exécuter :
docker build . -t my-mysql
docker run -e MYSQL_ROOT_PASSWORD=root -it my-mysql
Basé sur la réponse de @Robert, je me suis retrouvé avec ce 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
Le CMD
le remplacement n'a pas fonctionné pour moi, le conteneur s'est arrêté avec une erreur étrange :
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.
Je suppose que l'original CMD
command faisait plus de choses qui manquent maintenant (dans la réponse @Robert) donc je l'ai fait dans une approche différente. Je ne l'ai pas essayé avec latest
version mais je pense que ça devrait marcher.
Si vous utilisez docker-compose
, il n'est pas nécessaire de créer une image personnalisée. Ajoutez simplement le drapeau --datadir=/var/lib/mysql-no-volume
à votre commande en tirant le mysql
photo.
Exemple :
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"
L'image mysql officielle stocke les données dans un volume. Normalement, cela est souhaité pour que vos données puissent persister au-delà de la durée de vie de votre conteneur, mais les volumes de données contournent le système de fichiers Union et ne sont pas validés dans l'image.
Vous pouvez accomplir ce que vous essayez de faire en créant votre propre image de base mysql sans volumes. Vous pourrez alors ajouter des données et les valider dans une image, mais toutes les données ajoutées à un conteneur en cours d'exécution après la validation seront perdues lorsque le conteneur disparaîtra.