2017-06-22 6 views
4

Ich habe diese Docker-compose:Wie MongoDB Daten mit speichern Docker-komponieren

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

Die Volumina, /data/mongodb/db:/data/db, ist der erste Teil (/data/mongodb/db), wo die Daten innerhalb des Bildes und den zweiten Teils gespeichert sind (/data/db) wo es lokal gespeichert ist?

Es funktioniert über die Produktion (ubuntu), aber wenn ich es auf meinem dev-Maschine laufen (mac) erhalte ich:

ERROR: for mongo Cannot start service mongo: error while creating mount source path '/data/mongodb/db': mkdir /data/mongodb: permission denied 

Auch wenn ich es als sudo laufen. Ich habe das /data Verzeichnis im "File Sharing" -Bereich im Docker-Programm auf dem Mac hinzugefügt.

enter image description here

Ist die Idee beide die gleiche Docker-komponieren zu verwenden, um auf die Produktion und Entwicklung? Wie löse ich dieses Problem?

Antwort

5

Eigentlich ist es anders herum (HOST: CONTAINER), /data/mongodb/db ist auf Ihrem Host-Rechner und /data/db ist im Container.

Sie haben die /data in den freigegebenen Ordnern Ihres Dev-Computers hinzugefügt, aber Sie haben /data/mongodb/db nicht erstellt, deshalb erhalten Sie einen permission denied Fehler. Docker verfügt nicht über die Rechte zum Erstellen von Ordnern.

1

Ich habe den Eindruck, dass Sie ein wenig mehr über die Grundlagen von Docker lernen müssen, um zu verstehen, was Sie tun. Es gibt eine Menge potentieller Fallstricke, bei denen Docker in der Produktion läuft, und meine Empfehlung ist, die Grundlagen wirklich gut zu lernen, damit Sie wissen, wie man damit umgeht. Hier

ist, was die Dokumentation sagt über volumes:

[...] geben Sie einen Pfad auf dem Host-Rechner (HOST: CONTAINER)

So Sie es den falschen Weg haben um . Der erste Teil ist die Vergangenheit auf dem Host, z.B. Ihre lokale Maschine, und die zweite ist, wo das Volumen im Container montiert ist.

Der angezeigte Fehler wird durch die Tatsache verursacht, dass auf Ihrem lokalen Computer kein /data/mongodb vorhanden ist und das Erstellen dieses Pfads aufgrund von Berechtigungen fehlschlägt. Um dies zu verhindern, verwenden Sie einen Standort in Ihrem Benutzer zu Hause, also etwas unter ~/.

In Bezug auf Ihre letzte Frage, werfen Sie einen Blick auf diesen Artikel: Using Compose in production.