2 votes

Comment empêcher l'initialisation du conteneur MySQL au démarrage ?

À des fins de test, je veux construire un conteneur MySQL dans lequel un jeu de données est amorcé. Je sais que le montage est possible et que vous pouvez placer sql scripts dans le répertoire init pour lancer l'importation au démarrage, mais ce n'est pas ce que nous voulons. J'ai donc essayé d'en construire un moi-même qui copie simplement les fichiers de données dans le conteneur docker.

J'utilise le dockerfile suivant pour construire mon conteneur.

FROM mysql:8.0.21
EXPOSE 3306

ARG BUILD_ID
LABEL stage=builder
LABEL build=$BUILD_ID
ENV TZ=Europe/Amsterdam

RUN apt-get update && apt-get install -y tzdata
ADD http://server.example.com/data/datafiles_2020_11_02.tar.gz /var/lib/datafile.tar.gz
RUN tar -xvzf /var/lib/datafile.tar.gz -C /var/lib/mysql && chown -R mysql.root /var/lib/mysql
#ADD initieel/* /docker-entrypoint-initdb.d/
ADD cnf/* /etc/mysql/mysql.conf.d/

Cela s'est déroulé avec succès, après quoi j'ai fait tourner mon conteneur fraîchement construit et pendant le démarrage, quelque chose dans le conteneur va initialiser une nouvelle base de données et jeter tout ce que j'ai placé dans /var/lib/mysql. J'ai vérifié le README qui accompagne le conteneur mysql mais je n'ai rien trouvé qui concerne ce problème.

Merci d'avance de prendre le temps de lire. Je ferai une mise à jour si mon post manque d'informations.

0voto

Gerald Schneider Points 17588

L'approche commune consiste à ne spécifier l'initialisation que lorsque cela est nécessaire.

Au lieu de mettre RUN tar -xvzf /var/lib/datafile.tar.gz directement dans votre Dockerfile, placez-le dans un Shell Shell que vous ajoutez à votre conteneur, par exemple sous la forme suivante /opt/mysql-bootstrap.sh .

Ensuite, lorsque vous créez votre conteneur la première fois sur un hôte, exécutez docker avec ce script.

docker run --rm -v /path/to/var/lib/mysql:/var/lib/mysql \
    --name my-mysql-bootstrap my-mysql:latest /opt/mysql-bootstrap.sh

El --rm supprimera le conteneur après l'exécution du script d'initialisation. Ensuite, créez votre conteneur qui reste :

docker run -v /path/to/var/lib/mysql:/var/lib/mysql \
    --name my-mysql my-mysql:latest

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X