2015-12-23 17 views
6

Ich bin mit meinem Witz am Ende damit, also hoffentlich können Sie mir helfen. In OSX 10.11.2 mit Docker-Maschine habe ich eine Docker-Compose-Datei, die eine lokale Docker-Datei erstellen und einen MySQL-Container anhängen soll. Der MySQL-Container sollte einen lokalen Ordner bereitstellen, in dem ich meine Datenbankdaten speichere. Wenn also der Container oder die VM herunterkommt, kann ich sie einfach neu starten, ohne Datenverlust. Das Problem ist, wenn ich es laufen, es wirft einen Berechtigungsfehler:Berechtigung verweigert, wenn Docker-Volume in OSX

db_1 | 2015-12-23 19:17:59 7facaa89b740 InnoDB: Operating system error number 13 in a file operation. 
db_1 | InnoDB: The error means mysqld does not have the access rights to 
db_1 | InnoDB: the directory. 

ich jede Permutation versucht habe ich denken kann diese Arbeit zu bekommen. Ich habe gelesen und es kann etwas damit zu tun haben, wie docker-machine Berechtigungen mit OSX behandelt, aber die Dokumentation für docker-machine sagt, dass es den Ordner /Users mounts, so dass sollte kein Problem sein.

Hier ist die docker-compose.yml:

web: 
    build: . 
    ports: 
    - "3000:3000" 
    links: 
    - db 
db: 
    image: mysql:5.6 
    ports: 
    - "3306:3306" 
    volumes: 
    - /Users/me/Development/mysql-data:/var/lib/mysql 
    environment: 
    MYSQL_ROOT_PASSWORD: mypass 

Irgendwelche Ideen? Ich kann nicht anders, als zu denken, dass es etwas wirklich Einfaches ist. Jede Hilfe würde sehr geschätzt werden!

Edit:

  • Wirt - drwxr-xr-x 7 me staff 238 Dec 23 12:10 mysql-data/
  • VM - drwxr-xr-x 1 docker staff 238 Dec 23 20:10 mysql-data/

In Bezug auf den Behälter, wird es nicht laufen mit dem Volumen montiert. Ohne die -v montieren, es ist:

  • Container - drwxr-xr-x 4 mysql mysql 4096 Dec 24 00:37 mysql
+0

Die Ausgabe von 'ls -lh' für das Datenverzeichnis an allen drei Stellen (host, vm, container) wäre hilfreich beim Debuggen.Ich denke am wahrscheinlichsten ist, dass das Verzeichnis im Besitz von root ist und den mysql-Benutzer nicht neue Dateien erstellen lässt. – dnephin

+0

@dnephin, Ich habe die Frage oben mit den Daten aktualisiert. Hilft das? – greggilbert

Antwort

11

Das Problem des herkommt ist der Benutzer-IDs jeweils von Mac und Linux verwendet. Der Mac mag es nicht, wenn Linux die 1 für die Benutzer-ID verwenden möchte.

Die Art, wie ich gearbeitet um alle Verrücktheit Berechtigungen in meinem Mac + Docker-Maschine-Setup ist diese Dockerfile

FROM mysql:5.6 

RUN usermod -u 1000 mysql 
RUN mkdir -p /var/run/mysqld 
RUN chmod -R 777 /var/run/mysqld 

Statt der Ebene MySQL 5.6 Bild zu verwenden.

Die letzten 2 Zeilen sind notwendig, da das Ändern der Benutzer-ID für den mysql-Benutzer die Build-Berechtigungen für dieses Bild durcheinander bringt. => Sie brauchen die 777 Berechtigungen, um es hier laufen zu lassen:/

Ich weiß, dass dies ein wenig hacky ist, aber bis jetzt die beste Lösung, die ich kenne, um die Berechtigungen Problem hier.

+0

Okay, das hat mir sehr geholfen! Das Bild bleibt mindestens erhalten. Ich betreibe es jedoch nicht an einer Steckdose. Ohne die letzten zwei Zeilen bekomme ich jedoch: '[ERROR] Kann Server nicht starten: Bind auf Unix-Socket: Berechtigung verweigert" '[FEHLER] Haben Sie bereits einen anderen MySQL-Server auf Socket:/var /run/mysqld/mysqld.sock? ' Und dann tut es. Irgendwelche Ideen? – greggilbert

+0

Oh Entschuldigung, mein Schlechter. Ich mische das Ding ein wenig hier. Wenn Sie Benutzer-IDs wechseln, wird dies mit den Berechtigungen, die im Basis-Image erstellt wurden, verwechselt. Die Benutzer-ID 1000 hat keinen Zugriff auf/var/run/mysqld => Sie müssen dies manuell anpassen. –

+0

danke für die Notiz. Der Versuch, eine Verbindung vom verbundenen Container herzustellen, besagt, dass ERROR 1130 (HY000): Host '172.17.0.3' sich nicht mit diesem MySQL-Server verbinden darf ', also denke ich, dass ich vielleicht meine eigene 'my.cnf' hinzufügen muss auch da drin? – greggilbert

0

Versuchen Sie, das neueste Andockfenster für Mac anstelle von Andockwerkzeugen zu verwenden. Docker für Mac verwendet nicht mehr VirtualBox, sondern HyperKit, eine leichte OS X-Virtualisierungslösung, die auf Hypervisor.framework in OS X 10.10 Yosemite und höher aufsetzt.

Ich schlage vor, auch Docker Tools vollständig entfernen (sie könnten koexistieren): https://github.com/docker/toolbox/blob/master/osx/uninstall.sh

Mit Docker für mac, Sie müssen nicht die Erlaubnis Hacks verwenden, wäre es einfach funktionieren, wie es auf einem Linux wäre bauen.

Verwandte Themen