2015-12-23 16 views
6

Jestem na tym koniec mojego dowcipu, więc mam nadzieję, że ludzie mogą mi pomóc. W OSX 10.11.2 z docker-machine, mam plik dokowania, który powinien zbudować lokalny plik Docker i dołączyć do niego kontener MySQL. Kontener MySQL powinien zamontować folder lokalny, w którym przechowuję dane mojej bazy danych, więc jeśli kontener lub VM zostanie usunięty, mogę po prostu ponownie go uruchomić bez utraty danych. Problemem jest to, kiedy go uruchomić, to rzuca błąd uprawnienia:Odmowa uprawnień podczas montowania woluminu dokowania w 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. 

próbowałam każdy permutacji mogę myśleć, aby uzyskać to do pracy. Czytałem dookoła i może to mieć coś wspólnego z tym, w jaki sposób maszyna-doker obsługuje uprawnienia w systemie OSX, ale dokumentacja dla maszyny-dokowania mówi, że montuje katalog /Users, więc nie powinno to stanowić problemu.

Oto 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 

Jakieś pomysły? Nie mogę pomóc, ale myślę, że to naprawdę proste. Każda pomoc będzie najbardziej doceniona!

Edit:

  • Host - 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/

Co do pojemnika, to nie będzie działać z objętością zamontowany. Bez -v zamontować, to jest:

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

Dane wyjściowe pliku 'ls -lh' dla katalogu danych we wszystkich trzech lokalizacjach (host, vm, kontener) byłyby przydatne do debugowania.Najprawdopodobniej dzieje się tak, że katalog jest własnością root'a i nie pozwala użytkownikowi mysql tworzyć nowych plików. – dnephin

+0

@dnephin, zaktualizowałem powyższe pytanie danymi. To pomaga? – greggilbert

Odpowiedz

11

Kwestia ta pochodzi z tych identyfikatorów jest używane przez Mac i Linux odpowiednio. Mac nie lubi Linuksa, który chce użyć 1 dla ID użytkownika.

Sposób, w jaki obejść wszystkie szaleństwa uprawnienia w moim mac + doker automatyczna konfiguracja jest użycie tej Dockerfile

FROM mysql:5.6 

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

Zamiast zwykłego MySQL 5.6 obrazu.

Ostatnie 2 linie są konieczne, ponieważ zmiana ID użytkownika dla użytkownika mysql spowoduje zepsucie uprawnień do kompilacji dla tego obrazu. => potrzebujesz 777 uprawnień, aby go uruchomić tutaj:/

Wiem, że to trochę hacky, ale jak dotąd najlepsze rozwiązanie, jakie znam w kwestii uprawnień tutaj.

+0

Okay, to bardzo pomogło! Obraz pozostaje co najmniej. Nie używam go jednak na gnieździe. Jednak bez dwóch ostatnich linii otrzymam: '[ERROR] Nie można uruchomić serwera: powiąż gniazdo unix: Permission denied' ' [ERROR] Czy masz już inny serwer mysqld działający na gnieździe:/var /run/mysqld/mysqld.sock? ' A potem tak. Jakieś pomysły? – greggilbert

+0

Och, przepraszam, moja zła. Łączę tu trochę rzeczy. Jeśli zmienisz identyfikatory użytkowników, spowoduje to bałagan z uprawnieniami wbudowanymi w obraz podstawowy. Identyfikator użytkownika 1000 nie będzie miał dostępu do/var/run/mysqld =>, musisz to zmienić ręcznie. –

+0

dzięki za notatkę. Próba połączenia z połączonego kontenera mówi 'ERROR 1130 (HY000): Host '172.17.0.3' nie może połączyć się z tym serwerem MySQL', więc myślę, że może muszę dodać własne' my.cnf' tam też? – greggilbert

0

Spróbuj użyć najnowszego okna dokowanego dla systemu Mac zamiast narzędzi dokujania. Docker dla Mac nie korzysta już z VirtualBox, ale raczej z HyperKit, lekkiego rozwiązania do wirtualizacji OS X zbudowanego na platformie Hypervisor.framework w systemie OS X 10.10 Yosemite i nowszych wersjach.

Proponuję również całkowicie usunąć narzędzia Döcker (mogą one współistnieć): https://github.com/docker/toolbox/blob/master/osx/uninstall.sh

Z dokowanym dla Mac, nie trzeba używać hacków uprawnień, to po prostu działa jak byłoby na linux budować.

Powiązane problemy