2015-12-23 28 views
6

Sono alla fine del mio spirito con questo, quindi spero che la gente possa aiutarmi. In OSX 10.11.2 con la finestra mobile, ho un file di composizione docker che dovrebbe creare un Dockerfile locale e collegare un contenitore MySQL ad esso. Il contenitore MySQL dovrebbe montare una cartella locale in cui sto memorizzando i dati del mio database, quindi se il contenitore o la VM si arrestano, posso semplicemente riavviarlo senza perdita di dati. Il problema è che, quando l'eseguo, si genera un errore permesso:Autorizzazione negata durante il montaggio del volume Docker 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. 

Ho provato ogni permutazione mi viene in mente per arrivare a questo lavoro. Stavo leggendo in giro e potrebbe avere qualcosa a che fare con la macchina docker che gestisce le autorizzazioni con OSX, ma la documentazione per la finestra mobile dice che monta la cartella /Users, quindi non dovrebbe essere un problema.

Ecco il 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 

Tutte le idee? Non posso fare a meno di pensare che sia qualcosa di veramente semplice. Qualsiasi aiuto sarebbe più apprezzato!

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/

Per quanto riguarda il contenitore, non verrà eseguito con il volume montato. Senza montare il -v, è:

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

L'output di 'ls -lh' per la directory di dati in tutte e tre le posizioni (host, vm, container) sarebbe utile per il debug.Penso che molto probabilmente ciò che sta accadendo è che la directory è di proprietà di root e non permette all'utente mysql di creare nuovi file. – dnephin

+0

@dnephin, ho aggiornato la domanda sopra con i dati. Questo aiuta? – greggilbert

risposta

11

Il problema viene da questo è l'userids utilizzati rispettivamente da Mac e Linux. A Mac non piace Linux che vuole utilizzare l'1 per l'ID utente.

Il modo in cui ho lavorato in giro per tutto il caos delle autorizzazioni nel mio mac + finestra mobile macchina messa a punto è quello di utilizzare questo Dockerfile

FROM mysql:5.6 

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

Invece di pianura MySQL 5.6 Immagine.

Le ultime 2 righe sono necessarie, poiché la modifica dell'utenteid per l'utente mysql rovinerà le autorizzazioni di generazione per quell'immagine. => hai bisogno delle 777 autorizzazioni per farlo funzionare qui:/

So che questo è un po 'hacky, ma finora la migliore soluzione che conosco al problema dei permessi qui.

+0

Ok, quindi questo ha aiutato molto! L'immagine rimane almeno. Non lo sto eseguendo su un socket, però. Senza le ultime due righe, però, ottengo questo: '[ERRORE] Impossibile avviare il server: Bind sul socket unix: Autorizzazione negata' ' [ERRORE] Hai già un altro server mysqld in esecuzione su socket:/var /run/mysqld/mysqld.sock? ' E poi lo fa. Qualche idea? – greggilbert

+0

Oh scusa, mia cattiva. Qui sto mescolando un po 'di cose. Se cambi ID utente, questo si confonderà con le autorizzazioni create nell'immagine di base. L'utente id 1000 non avrà accesso a/var/run/mysqld => è necessario regolarlo manualmente. –

+0

grazie per la nota. Il tentativo di connettersi dal contenitore collegato dice 'ERROR 1130 (HY000): l'host '172.17.0.3' non è autorizzato a connettersi a questo server MySQL', quindi penso che forse dovrò aggiungere il mio' my.cnf'. anche lì? – greggilbert

0

Prova a utilizzare la finestra mobile più recente per Mac invece degli strumenti finestra mobile. Docker per Mac non utilizza più VirtualBox, ma HyperKit, una soluzione di virtualizzazione leggera per OS X costruita su Hypervisor.framework in OS X 10.10 Yosemite e versioni successive.

Suggerisco anche rimuovere completamente gli strumenti della finestra mobile (che potevano coesistere): https://github.com/docker/toolbox/blob/master/osx/uninstall.sh

Con finestra mobile per Mac, non c'è bisogno di usare hack autorizzazione, sarebbe solo di lavoro come sarebbe su un linux costruire.

Problemi correlati