Na základě výzkumu @dekin jsem problém vyřešil takto:
Dockerfile:
FROM mysql:latest
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
CMD ["--datadir", "/var/lib/mysql-no-volume"]
Sestavit a spustit:
docker build . -t my-mysql
docker run -e MYSQL_ROOT_PASSWORD=root -it my-mysql
Na základě odpovědi @Robert jsem skončil s tímto 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
CMD
přepsání mi nefungovalo, kontejner se zastavil s podivnou chybou:
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.
Předpokládám, že původní CMD
příkaz dělal více věcí, které nyní chybí (v odpovědi @Robert), takže jsem to udělal jiným přístupem. Nezkoušel jsem to s latest
verzi, ale myslím, že by to mělo fungovat.
Pokud používáte docker-compose
, není potřeba vytvářet vlastní image. Stačí přidat příznak --datadir=/var/lib/mysql-no-volume
na váš příkaz při vytahování mysql
obrázek.
Příklad:
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"
Oficiální obraz mysql ukládá data do svazku. Normálně je to žádoucí, aby vaše data mohla přetrvávat i po uplynutí životnosti vašeho kontejneru, ale objemy dat obcházejí systém souborů Union a nejsou zavázány k obrazu.
Můžete dosáhnout toho, o co se snažíte, vytvořením vlastního základního obrazu mysql bez svazků. Poté budete moci přidat data a odevzdat je do obrázku, ale všechna data přidaná do běžícího kontejneru po odevzdání budou ztracena, když kontejner zmizí.