2016-04-22 14 views
2

Ich bin mit MacOSX 10.11 und ich habe kürzlich versucht, alle meine Projekte zu docken.Berechtigungen Problem mit Docker und Mac OSX

Ich habe ein Problem versucht, eine mongoDB + NodeJS-Anwendung mit Docker-Compose auszuführen.

Hier ist mein Docker-compose Skript:

version: '2' 
services: 
    mongodata: 
    image: mongo:latest 
    volumes: 
     - "${APP_DB}:/data" 
    command: "--break-mongo" 
    mongo-app: 
    image: mongo:latest 
    volumes_from: 
     - "mongodata" 
    expose: 
     - "27017" 
    ports: 
     - "27017:27017" 
    command: "--smallfiles --dbpath /data" 
    web: 
    build: . 
    volumes: 
     - .:/usr/src/app 
    ports: 
     - "3000:3000" 
    depends_on: 
     - mongo-app 
    links: 
     - mongo-app 
    environment: 
     - PORT=3000 

Also im Grunde habe ich einen volumen nur Behälter, der meine Dateien bestehen bleiben wird. Dann starte ich Mongo basierend auf diesem Volume, dann starte ich meine NodeJS App.

Aber jedes Mal wenn ich versuche tto laufen Docker-komponieren, ich habe die folgende Fehlermeldung:

mongo-app_1 | 2016-04-22T07:14:05.931+0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data 64-bit host=4c43c9e20014 
mongo-app_1 | 2016-04-22T07:14:05.931+0000 I CONTROL [initandlisten] db version v3.2.5 
mongodata_1  | try 'mongod --help' for more information 
mongo-app_1 | 2016-04-22T07:14:05.932+0000 I CONTROL [initandlisten] git version: 34e65e5383f7ea1726332cb175b73077ec4a1b02 
mongo-app_1 | 2016-04-22T07:14:05.932+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013 
mongo-app_1 | 2016-04-22T07:14:05.932+0000 I CONTROL [initandlisten] allocator: tcmalloc 
mongo-app_1 | 2016-04-22T07:14:05.932+0000 I CONTROL [initandlisten] modules: none 
mongo-app_1 | 2016-04-22T07:14:05.933+0000 I CONTROL [initandlisten] build environment: 
mongo-app_1 | 2016-04-22T07:14:05.933+0000 I CONTROL [initandlisten]  distmod: debian71 
mongo-app_1 | 2016-04-22T07:14:05.933+0000 I CONTROL [initandlisten]  distarch: x86_64 
mongo-app_1 | 2016-04-22T07:14:05.933+0000 I CONTROL [initandlisten]  target_arch: x86_64 
mongo-app_1 | 2016-04-22T07:14:05.934+0000 I CONTROL [initandlisten] options: { storage: { dbPath: "/data", mmapv1: { smallFiles: true } } } 
mongo-app_1 | 2016-04-22T07:14:05.947+0000 I -  [initandlisten] Detected data files in /data created by the 'mmapv1' storage engine, so setting the active storage engine to 'mmapv1'. 
mongo-app_1 | 2016-04-22T07:14:05.958+0000 W -  [initandlisten] Detected unclean shutdown - /data/mongod.lock is not empty. 
mongo-app_1 | 2016-04-22T07:14:05.959+0000 I STORAGE [initandlisten] exception in initAndListen: 98 Unable to create/open lock file: /data/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating 
mongo-app_1 | 2016-04-22T07:14:05.964+0000 I CONTROL [initandlisten] dbexit: rc: 100 

Soweit ich weiß, dass es nur auf MacOSX passiert, habe ich versucht zu CHOWN + CHMOD der/Datenordner aber Ich sah einen Thread, der besagt, dass Sie in einem Container nicht CHOWN können, nachdem das Volume gemountet wurde, und ich kann bestätigen, dass es nichts tut. Aber da ich eine docker-compose-Datei verwende, kann ich das nicht tun, BEVOR Sie das Volume mounten. Haben Sie eine Idee?

Antwort

1

Mit docker-machine auf MacOS können Sie Volumes nur innerhalb des Home-Host-Verzeichnisses binden. Andere Verzeichnisse funktionieren nicht, da sie sich nicht in einem Ordner befinden, der von VBox geteilt wird. https://www.virtualbox.org/manual/ch08.html#vboxmanage-sharedfolder

Mehr Informationen zu dieser Ausgabe::

https://github.com/docker/machine/issues/1826

+0

Eigentlich $ {APP_DB} ist in meinem Home-Verzeichnis, aber immer noch, es s nicht funktioniert. ... – Sanduckhan

+0

Noch irgendwelche Gedanken? – Sanduckhan

0

Haben Sie tatsächlich benötigen montieren das Datenverzeichnis von Ihrem Host-System können Sie Ihre Ordner außerhalb Benutzer zu Hause mit VBoxManage teilen? Können Sie nicht einfach Container-Volumes für den Datenordner verwenden?

Die Informationen werden weiterhin auf dem Container gespeichert.

Beispiel:

version: '2' 
volumes: 
    mongo_data: {} 
services: 
    mongo-app: 
    image: mongo:latest 
    volumes: 
     - mongo_data:/data/db 
    expose: 
     - "27017" 
    ports: 
     - "27017:27017" 
    command: "--smallfiles --dbpath /data/db" 

Quellen:

+0

Ich habe ein wichtiges Backup auf meinem Host, deshalb versuche ich das zu tun, aber wenn ich einen zuverlässigen Weg finde, es zu importieren, hast du recht ... – Sanduckhan

+0

Hast du versucht, das Volume auf einen anderen Pfad zu mappen und nach Zugriff darauf der Container mit docker-compose run mongo-app bash, Kopieren der Dateien an den gewünschten Ort? Wenn sich die Datei nicht auf einem freigegebenen Host-Volume befindet, können Sie Berechtigungen und Berechtigungen ändern. –

+0

Das funktioniert nicht, der nodejs wird nicht mit dem neuen "volumes_from" -Standort aktualisiert, es sei denn, ich lösche den mongodata-Container und entferne so alle meine Berechtigungen und Besitzänderungen ... – Sanduckhan