wake-up-neo.net

Fügen Sie dem Dockerfile wie das Volume ein Bind-Mount hinzu

Ich möchte das Bind-Mount zur Docker-Datei hinzufügen, genauso wie ich ein Volume in Dockefile initialisiere. Gibt es einen Weg dafür? 

9
Mufeed

Eine Docker-Datei definiert, wie ein Image erstellt wird, und nicht, wie es verwendet wird. Daher können Sie den Bind-Mount nicht in einer Docker-Datei angeben. Verwenden Sie stattdessen docker-compose . Ein einfacher docker-compose.yml, der ein Verzeichnis für Sie bereitstellt, würde folgendermaßen aussehen:

version: '3.1'

services:
  mycontainer:
    image: myimage
    build: .
    volumes:
      - './path/on/docker/Host:/path/inside/container'  

Der build: . ist optional, wenn Sie das Bild auf andere Weise erstellen, aber manchmal ist es praktisch, alles auf einmal zu tun.

Führen Sie dies mit docker-compose up -d aus.

13
boyvinall

Zusätzlich zu dem, was die anderen Antworten sagen:

Da Bind-Mounts Zugriff auf das Host-Dateisystem bieten, wäre die Einbindung in ein Image ein großes Sicherheitsrisiko. Stellen Sie sich ein Bild vor, das angeblich ein Webserver sein soll, binden Sie jedoch mounts Ihren /etc/passwd und /etc/shadow und senden Sie sie an einen Remote-Server.

Oder eine, die Mounts /lib/ld-linux.so bindet und diese dann überschreibt, wodurch das gesamte System zerstört wird.

Aus diesen Gründen können Sie kein Bind-Mount in Ihre Docker-Datei einbetten. Ebenso können Sie in der Docker-Datei keine Host-Port-Zuordnungen, keinen Host-Gerätezugriff oder ähnliche Attribute angeben.

5
larsks

Einfache Antwort ist nein.

Ein grundlegendes Konstruktionsprinzip für Docker-Bilder ist die Portabilität. Bind-Mounts sind Host-spezifisch, da der gemountete Ordner auf dem Host-Computer definiert ist. Dies steht also im Widerspruch zur Portabilitätsanforderung für Docker-Images.

1
yamenk