sur OS X.
J'essaie d'exécuter MySQL dans un conteneur Docker via Boot2Docker, en montage du volume J'utilise la commande suivante pour exécuter le conteneur: p> / Utilisateurs / Yash / Summers / dB code> est déjà là. p> 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
J'ai essayé de résoudre ceci depuis 2 jours, en passant autant de pages comme Ce , Ce et Cette . P> 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. p> 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. P> Quelqu'un peut-il vous expliquer un Solution de contournement détaillée pour cela. p> Je suis capable de tout courir Si je n'utilise aucun < Strong> Mise à jour 2: forte>
DockerFile utilisée pour créer le conteneur de données uniquement: p> / var / lib / mysql code> 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. P>
Docker Run -V / Utilisateurs / YASH / Summers / DB: / var / lib / mysql -i -t 'Nom de l'image' Code> P>
Service MySQL Démarrer CODE>, je reçois l'erreur suivante: p>
-v code> ou
- volumes-de code> option, je pense que je pense qu'il n'y a pas de problème dans MySQL Server. P>
3 Réponses :
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
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
Lorsque vous utilisez J'ai ~ / FOO Directory qui appartient à moi - Mon UID est 1000 P> 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):
~ $ 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
Il y a deux solutions différentes.
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 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>
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> 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>
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/
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