9
votes

MySQL dans le conteneur Docker ne peut pas parcourir un volume monté sur OS X

sur OS X.

J'essaie d'exécuter MySQL dans un conteneur Docker via Boot2Docker, en montage du volume / var / lib / mysql sur l'hôte, de sorte que je puisse avoir persistant Données MySQL. Je prévois d'utiliser un conteneur de données uniquement à l'avenir, mais en ce moment, j'essayais de le faire en utilisant cette option.

J'utilise la commande suivante pour exécuter le conteneur:

Docker Run -V / Utilisateurs / YASH / Summers / DB: / var / lib / mysql -i -t 'Nom de l'image'

/ Utilisateurs / Yash / Summers / dB est déjà là.

Je suis confronté à des problèmes de perspections à cet égard. Utilisation de Commandline, je suis capable d'accéder au répertoire, de créer / supprimer de nouveaux fichiers, mais quand je cours Service MySQL Démarrer , je reçois l'erreur suivante: xxx

J'ai essayé de résoudre ceci depuis 2 jours, en passant autant de pages comme Ce , Ce et Cette .

Je ne peux pas résoudre mon problème. Je pense que je ne suis pas capable de faire parfaitement ce que les solutions suggèrent.

De ma compréhension, il y a des solutions de contournement énumérées sur ces pages qui incluent la modification des UID et des GUID, mais je pense qu'ils ne sont pas bien expliqués.

Quelqu'un peut-il vous expliquer un Solution de contournement détaillée pour cela.

Mise à jour 1: J'ai essayé celui-ci avec un conteneur de données uniquement, et toujours face au même problème.

Je suis capable de tout courir Si je n'utilise aucun -v ou - volumes-de option, je pense que je pense qu'il n'y a pas de problème dans MySQL Server.

< Strong> Mise à jour 2: DockerFile utilisée pour créer le conteneur de données uniquement: xxx


5 commentaires

J'ai essayé avec un conteneur de données uniquement et je suis toujours confronté au même problème.


J'ai le même problème. À la recherche d'une réponse aussi


@Jtwebman: Avez-vous eu une solution?


Pouvez-vous utiliser un script d'entrée dans lequel vous modifiez le propriétaire du volume mappé pour être utilisateur MySQL? J'ai eu un problème similaire avec PostgreSQL à Linux, j'ai utilisé un conteneur de données et j'ai modifié le dossier de données pour appartenir à l'utilisateur Postgres lors de l'exécution du conteneur, et cela a fonctionné.


@YASHASVI fait ma réponse ci-dessous vous aider? Ça a fonctionné pour moi


3 Réponses :


-1
votes

Je manquai de la même manière à ce problème; Je l'ai résolu par Chmod / Chown'ing à l'intérieur de mon conteneur de données, par exemple:

FROM ubuntu

# Create data directory
RUN mkdir -p /data /var/lib/mysql
RUN chmod -R 777 /data /var/lib/mysql
RUN chown -R root:root /data /var/lib/mysql

# Create /data volume
VOLUME /data
VOLUME /var/lib/mysql


6 commentaires

Cette réponse ne fonctionne pas pour moi dans 1.8.1. Quelqu'un a-t-il trouvé une bonne solution?


@DanielPayne Pour être clair, utilisez-vous 2 conteneurs, une pour la DB l'autre comme un conteneur pur "données uniquement"?


Non, cela résoudrait le problème des autorisations? Si oui, avez-vous un exemple de conteneur de données pour cela?


Oui: Vous avez besoin d'un conteneur "Données uniquement", séparé de votre conteneur DB et à l'aide du code fourni ci-dessus, il fonctionnera. Voyez ici: docs.docker.com/userguide/dockervolumes


Le code ci-dessus est-il ci-dessus pour le conteneur-conteneur DockerFile ou le MySQL?


@DanielPayne le conteneur de données uniquement



0
votes

Lorsque vous utilisez Docker Run -V code> option, puis docker ne manipule pas avec la propriété des fichiers. Donc, le propriétaire du dossier monté à l'intérieur du conteneur aura le même uide que dans le système hôte (nom d'utilisateur peut être différent). Vous pouvez modifier la propriété du fichier ou du répertoire à l'intérieur du conteneur par chmod code>, mais il change également la propriété dans l'hôte Sytem. Vous pouvez donc préparer une appropriation correcte sur votre système hôte avant d'exécuter Docker Contener. Cet exemple montre comment cela fonctionne (essayez-le sur votre système):

J'ai ~ / FOO Directory qui appartient à moi - Mon UID est 1000 P>

~ $ docker run -it --rm -v ~/foo:/tmp/bar/foo busybox ls -ln /tmp
total 4
drwxr-xr-x    3 0        0             4096 Nov 24 22:10 bar


0 commentaires

3
votes

Il y a deux solutions différentes.

  1. solution # 1. Avec dockerfile fort> p>

    (Je n'aime pas cela parce que je préfère l'image officielle de Docker Hub sans aucune modification) P>

    Ajouter exécuter usermod -u 1000 mysql code> à votre fichier docker pour définir ID 1000 Pour l'utilisateur "mysql" (le même identifiant comme à l'intérieur Docker-Machine). P> LI>

  2. solution # 2. Avec my.cnf fort>. P>

    toujours j'utilise ma propre config, je préfère cette solution. Nous avons déjà un utilisateur root avec ID 1000, à cause de cela peut exécuter MySQL avec cet utilisateur: p>

    • my.cnf strong> p>

      ligne principale est user = root code> strud> (vous pouvez utiliser sed code> pour ne changer que cette ligne dans le fichier. Je préfère monter tout fichier)

      [client]
      port        = 3306
      socket      = /var/run/mysqld/mysqld.sock
      default-character-set = utf8
      
      [mysqld_safe]
      pid-file    = /var/run/mysqld/mysqld.pid
      socket      = /var/run/mysqld/mysqld.sock
      nice        = 0
      
      [mysqld]
      user        = root
      pid-file    = /var/run/mysqld/mysqld.pid
      socket      = /var/run/mysqld/mysqld.sock
      port        = 3306
      basedir     = /usr
      datadir     = /var/lib/mysql
      tmpdir      = /tmp
      lc-messages-dir = /usr/share/mysql
      explicit_defaults_for_timestamp
      init_connect='SET collation_connection = utf8_unicode_ci'
      init_connect='SET NAMES utf8'
      character-set-server=utf8
      collation-server=utf8_unicode_ci
      skip-character-set-client-handshake
      
      # Instead of skip-networking the default is now to listen only on
      # localhost which is more compatible and is not less secure.
      #bind-address   = 127.0.0.1
      
      #log-error  = /var/log/mysql/error.log
      
      # Recommended in standard MySQL setup
      sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
      
      # Disabling symbolic-links is recommended to prevent assorted security risks
      symbolic-links=0
      
      # * IMPORTANT: Additional settings that can override those from this file!
      #   The files must end with '.cnf', otherwise they'll be ignored.
      #
      !includedir /etc/mysql/conf.d/
      
    • change par défaut mon.cnf avec ce fichier: strong> p>

      Docker Run -it -V ./mysql/var/lib/mysql:/var/lib/mysql -v ./my.cnff::/etc/mysql/my.cnf Mariadb: 10.0.22 P > li> ul> li> ol> p>


0 commentaires