[DOCKER] Que faire si une erreur lors de la création du chemin de la source de montage '/ host_mnt / Users / ~': mkdir / host_mnt / Users / ~: le fichier existe au démarrage du conteneur

phénomène

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

Environnement d'exploitation

  

Solutions

Si vous utilisez Docker Desktop pour Windows

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

Si vous utilisez Docker Desktop pour Mac

Docker Desktop for Mac → [preferences...] →[Resources] →[File Sharing]

Après avoir supprimé ** / Users **, [appliquer et redémarrer]

Ajoutez ensuite ** / Users ** et [Apply & Restart]

Ce que j'ai essayé avant de résoudre

Contexte opérationnel

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.

Essayé ①: supprimer le volume

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.

Essayé (2): mettre à jour les informations d'authentification du dossier partagé de Docker Desktop pour Mac (cette solution)

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

Cause

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

Que faire si une erreur lors de la création du chemin de la source de montage '/ host_mnt / Users / ~': mkdir / host_mnt / Users / ~: le fichier existe au démarrage du conteneur
Que faire si une erreur se produit lorsque nokogiri entre lors de l'installation du bundle
Que faire si le message "Un serveur est déjà en cours d'exécution" s'affiche. Erreur lors de la tentative de démarrage du serveur rails
Que faire si les modifications ne sont pas reflétées dans le fichier manifeste JAR
[Grails] Une erreur s'est produite lors de l'exécution Que faire lorsque la CLI Grails ne démarre pas
Que faire si le serveur Tomcat meurt
Que faire lors du débogage "Source non trouvée"
Que faire si l'installation du gem de débogage échoue
Que faire si le serveur Rails ne peut pas démarrer
Que faire lorsque le certificat SSL a expiré
Que faire si une exception ClassNotFoundException se produit lors du démarrage de Tomcat
Que faire si une erreur ActionController :: UnknownFormat se produit
Erreur ExecJS :: RuntimeUnavailable: que faire quand cela se produit
Que faire si une erreur d'analyseur SAX se produit lors de l'utilisation de Liferay 7 / DXP sur AWS
[Rails] Que faire si vous ne pouvez pas obtenir de message d'erreur avec la méthode des erreurs
Que faire si la commande adb ne peut pas être exécutée
Que faire si mysql2 obtient une erreur d'installation de bundle
Que faire si la commande rails devient inutilisable
[Rails] Que faire lorsque l'erreur Aucune base de données sélectionnée et Base de données inconnue apparaît dans db: migrate
Que faire si vous vous déconnectez en raison d'une erreur de certificat SSL lors de l'exécution de Jenkins sur votre Mac
[Débutant en programmation] Que faire lorsque les rails deviennent une erreur dans l'environnement de développement local
Que faire lorsque vous souhaitez connaître la position source où la méthode est définie dans binding.pry
Que faire si vous obtenez une erreur de bibliothèque partagée JNI lorsque vous essayez de créer avec Eclipse
Que faire à propos de l'erreur "Impossible de lire ou n'est pas un fichier ZIP valide"
Que faire si l'application n'est pas créée avec la dernière version de Rails installée lorsque les rails sont neufs