2017-06-27 5 views
0

Mein Docker-compose:permisson Fehler mit Mongo beim Laufen Docker

version: "2" 
services: 
    bimbucket-api: 
    build: . 
    ports: 
     - "3007:3007" 
    links: 
     - mongo 
    volumes: 
     - .:/opt/app 
    mongo: 
    image: mongo 
    volumes: 
     - /data/db:/data/db 
    ports: 
     - "27017:27017" 

ich permissionerror:

mongo_1   | chown: changing ownership of '/data/db/diagnostic.data/metrics.2017-06-27T13-32-30Z-00000': Operation not permitted 
mongo_1   | chown: changing ownership of '/data/db/journal/WiredTigerLog.0000000054': Operation not permitted 
mongo_1   | chown: changing ownership of '/data/db/journal/WiredTigerPreplog.0000000001': Operation not permitted 
mongo_1   | chown: changing ownership of '/data/db/journal/WiredTigerPreplog.0000000002': Operation not permitted 
mongo_1   | chown: changing ownership of '/data/db/WiredTiger.turtle': Operation not permitted 
mongo_1   | chown: changing ownership of '/data/db/WiredTigerLAS.wt': Operation not permitted 

ls-la zu den Daten:

ls -la data 
total 0 
drwxrwxrwx 3 root wheel 102 Dec 1 2016 . 
drwxr-xr-x 35 root wheel 1258 Jun 25 04:29 .. 
[email protected] 118 root wheel 4012 Jun 27 15:33 db 

Wenn ich manuell ändern die Freigabe von /data/db, wird es zurück geändert werden.

Was ist das Problem hier? Es gibt kein Problem, wenn ich Mongo lokal betreibe.

+0

Welche Berechtigungen haben der Ordner/data/db im Host? Das Root-Verzeichnis sollte dem root-Benutzer gehören, der diesen Ordner im Andock-Container erstellt hat. –

Antwort

1

Nur der Root oder die Mitglieder der sudo-Gruppe können den Besitz einer Datei/eines Verzeichnisses ändern. Wenn Sie mongodb im Andockfenster ausführen und ein Volume vom Host anhängen, versucht mongo, als mongod-Benutzer zu arbeiten. Da dieser Benutzer nicht auf Ihrem Host vorhanden ist und root das Volume besitzt, das mongod/docker versucht, das Betriebssystem zu besitzen, sieht dies als ein Berechtigungsproblem an und Sie werden diesen Fehler sehen. Sie haben ein paar Optionen:

  1. konfigurieren Mongo über das Bearbeiten der Mongo Config als root ausführen und es während des Docker Build-Prozess zu kopieren. Dies setzt voraus, dass Sie eine Docker-Datei verwenden, um das Image zu erstellen. Dann wird es kein Problem haben, auf das angehängte Volume zuzugreifen.

  2. Erstellen Sie einen Mongok Benutzer & Gruppe auf dem Host und ändern Sie den Besitz des Datenverzeichnisses zu diesem Benutzer, dass das Betriebssystem keinen Unterschied in den Besitz/Berechtigungen sieht.

  3. Rearchitect Ihr System so Mongo kann die Standard-Container-Datenspeichergröße für seine Lebensdauer verwenden und komplett auf das Volume Mount verzichten.

0

hatte ich dieses Problem in CentOS und die Lösung wurde auf SELinux drehen:

setenforce 0 

Es ist kein Mongo Problem. Es ist tatsächlich ein Docker-Problem. Wenn Docker das Volume zuordnen will, versucht es die Berechtigung zu ändern und scheitert an den Einschränkungen von Benutzer/Gruppe/Selinux.

UPDATE:

Es gibt einen Befehl Chown in entrypoint.sh, die die Genehmigung der Verzeichnisse und Dateien in dem abgebildeten Volumen zu ändern versucht. Lesen Sie mehr in here.