Sulla base della ricerca di @dekin, ho fatto questo per risolvere il problema:
Dockerfile:
FROM mysql:latest
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
CMD ["--datadir", "/var/lib/mysql-no-volume"]
Crea ed esegui:
docker build . -t my-mysql
docker run -e MYSQL_ROOT_PASSWORD=root -it my-mysql
Sulla base della risposta di @Robert, sono finito con questo 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
Il CMD
override non ha funzionato per me, il contenitore si è fermato con uno strano errore:
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.
Immagino che l'originale CMD
command stava facendo più cose che ora mancano (nella risposta di @Robert), quindi l'ho fatto con un approccio diverso. Non l'ho provato con latest
ma penso che dovrebbe funzionare.
Se stai usando docker-compose
, non è necessario creare un'immagine personalizzata. Basta aggiungere il flag --datadir=/var/lib/mysql-no-volume
al tuo comando quando estrai il mysql
immagine.
Esempio:
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'immagine mysql ufficiale memorizza i dati in un volume. Normalmente questo è desiderato in modo che i tuoi dati possano persistere oltre la durata del tuo contenitore, ma i volumi di dati ignorano l'Union File System e non sono impegnati nell'immagine.
Puoi realizzare ciò che stai cercando di fare creando la tua immagine di base mysql senza volumi. Sarai quindi in grado di aggiungere dati e salvarli in un'immagine, ma tutti i dati aggiunti a un contenitore in esecuzione dopo il commit andranno persi quando il contenitore scompare.