GNU/Linux >> Znalost Linux >  >> Linux

Odevzdejte data v kontejneru mysql

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í.


Linux
  1. Urychlení vytváření obrazu kontejneru pomocí Buildah

  2. Terraform – Nasaďte Python Lambda (obrázek kontejneru)

  3. Jak potvrdit změny v obrazu Dockeru

  1. MySQL – Převod na data podle tabulky pro InnoDB

  2. Jak vytvořit vlastní obrázek z kontejneru Docker

  3. Co je uvnitř obrázku/kontejneru Dockeru?

  1. zlepšit rychlost importu mysql

  2. Nelze odeslat data MySQL do souboru

  3. Povolení LOAD DATA LOCAL INFILE v mysql