Arrêtez le conteneur (pour MySQL) qui définit les volumes → Démarrez-le
$ docker-compose up -d
Creating volume "sample_db-store" with default driver
Creating hoge_db_1 ... error
ERROR: for sample_db_1 Cannot start service db: error while creating mount source path '/host_mnt/Users/~/docker/mysql/sql': mkdir /host_mnt/Users/~/docker/mysql/sql: file exists
ERROR: Encountered errors while bringing up the project.
Un message d'erreur indiquant "Le répertoire hôte ne peut pas être monté" s'affiche et le conteneur ne peut pas être démarré.
Docker Desktop pour Windows → [Paramètres] → [Disques partagés] → [Réinitialiser les informations d'identification] → Réauthentification (vérifiez le chemin correspondant)
[référence] https://www.nuits.jp/entry/docker-for-windows-mkdir-file-exists
Docker Desktop for Mac → [preferences...] →[Resources] →[File Sharing]
Après avoir supprimé ** / Users **, [appliquer et redémarrer]
Ajoutez ensuite ** / Users ** et [Apply & Restart]
Avec docker-compose, je construisais un conteneur MySQL comme suit.
docker-compose.yml
version: '3'
services:
db:
image: mysql:8.0
volumes:
- db-store:/var/lib/mysql
- ./logs:/var/log/mysql
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/mysql/sql:/docker-entrypoint-initdb.d
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_PASS}
- TZ=${TZ}
ports:
- ${DB_PORT}:3306
volumes: db-store
En volumes, en plus de ceux liés aux données et au journal
docker-compose.yml
- ./docker/mysql/sql:/docker-entrypoint-initdb.d
Est défini.
Dans l'image pour MySQL, lors du montage sur / docker-entrypoint-initdb.d
, le fichier .sql
, .sh
existant dans le répertoire côté hôte spécifié est lu et exécuté lorsque le conteneur est démarré pour la première fois. ..
https://hub.docker.com/_/mysql/
Par conséquent, le SQL pour créer la table et le script shell pour exécuter le SQL ont été placés dans le répertoire . / Docker / mysql / sql
du côté hôte pour être montés sur le conteneur. Cela fonctionne sans aucun problème au premier démarrage. Le script SQL et shell que j'ai mis entre les deux fonctionnait sans aucun problème.
Cependant, une fois que le conteneur a été arrêté avec docker-compose stop
, ce phénomène s'est produit au démarrage avec docker-compose up
.
J'ai trouvé des informations selon lesquelles un comportement similaire pouvait être résolu en supprimant le volume, j'ai donc essayé de supprimer le conteneur et le volume nommé.
$ docker-compose down --volumes
Removing sample_db_1 ... done
Removing volume sample_db-store
$ docker-compose up -d
Échec.
Erreur similaire du démon Docker
docker: Error response from daemon: error while creating mount source path '/host_mnt/c/tmp': mkdir /host_mnt/c: file exists.
A été signalé lors de l'utilisation de Docker Desktop pour Windows. Cependant, je n'ai trouvé aucun rapport d'erreurs similaires survenant dans Docker Desktop pour Mac.
Ce n'est pas bon, mais le flux est un peu différent de celui de Windows, mais lorsque j'ai essayé d'imiter la solution de l'erreur ci-dessus avec Docker Desktop pour Mac, cela a fonctionné.
Je me demande si quelque chose s'est mal passé avec les paramètres de partage de Docker Desktop Volumes et je n'ai pas pu accéder aux informations de répertoire du côté hôte, mais je ne connais pas les détails.
Si vous connaissez la cause profonde, faites-le moi savoir: qiitan-cry:
Recommended Posts