web-dev-qa-db-de.com

Wie ändere ich den Standardspeicherort für den Befehl "docker create volume"?

Wenn Sie Volumes über die Volume-API erstellen, ist das Container-Volume-Muster nicht mehr unbedingt die beste Vorgehensweise:

# docker volume inspect test-data
[
    {
        "Name": "test-data",
        "Driver": "local",
        "Mountpoint": "/var/lib/docker/volumes/test-data/_data"
    }
]

Ich möchte zum Beispiel Docker-Volumes in/data haben (die auf einem anderen physischen Volume gemountet sind).

Dies ist nicht möglich mit symbolischen Links, es ist möglich mit Bindungs-Mounts, aber ich frage mich, ob Docker so konfiguriert ist, dass der Standardspeicherort für jedes einzelne Volume geändert wird.

22
dukeofgaming

2017: mit 17.05.0-ce (2017-05-04) verwirft PR 28696 das Flag --graph Zugunsten oder --data-root : 1ecaed0 festschreiben

Der Name "graph" ist ein älterer Begriff, als es an der Standardposition /var/lib/docker/graph Ein Verzeichnis gab.

Das Flag würde jedoch den Pfad des übergeordneten Verzeichnisses des Verzeichnisses "graph" angeben, das nicht nur Bilddaten, sondern auch Daten für Datenträger, Container und Netzwerke enthält.
In der neuesten Version von Docker enthält dieses Verzeichnis auch Schwarmclusterstatus- und Knotenzertifikate.

Mit Ausgabe 5922 und PR 5978 wurde die Dokumentation aktualisiert.

Beispiel :

ExecStart=/usr/bin/dockerd -H fd:// --data-root=/mnt/ssd/lib/docker

2016 (jetzt veraltet)

Ich kenne nur eine Docker-Option, um /var/lib/docker Selbst zu ändern, nicht seine Unterordner (Teil seines "Diagramm", das von einem Docker-Daemon-Speichertreiber verwendet wird )

Siehe Docker-Daemon "Verschiedene Optionen" :

Docker unterstützt Softlinks für das Docker-Datenverzeichnis (/var/lib/docker) Und für /var/lib/docker/tmp.
Das DOCKER_TMPDIR Und das Datenverzeichnis können wie folgt eingestellt werden:

DOCKER_TMPDIR=/mnt/disk2/tmp /usr/local/bin/docker daemon -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1
# or
export DOCKER_TMPDIR=/mnt/disk2/tmp
/usr/local/bin/docker daemon -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log

Wie in " Wo werden Docker-Images auf dem Host-Computer gespeichert? " (und das würde auch für Container/Volumes gelten):

Der Inhalt des Verzeichnisses /var/lib/docker Variiert je nach je nachdem, welchen Treiber Docker für die Speicherung verwendet .

13
VonC

Sie können den Speicherort der Docker-Dateien einschließlich der Volumes ändern, indem Sie einen der Startparameter namens --data-root Ändern.

Wenn Sie systemd für die Dienstverwaltung verwenden, befindet sich die Datei normalerweise unter /lib/systemd/system/docker.service. Bearbeiten Sie die Datei als solche:

# Old - taken from the generated docker.service file in Ubuntu 16.04's docker.io package
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS

# New
ExecStart=/usr/bin/dockerd --data-root /new_location/ -H fd:// $DOCKER_OPTS

Alternativ können Sie die Docker-Daemon-Konfigurationsdatei bearbeiten. Die Standardeinstellung ist /etc/docker/daemon.json.

Starten Sie den Docker-Daemon neu und Ihre Volumes befinden sich unter /new_location/volumes/{volume_name}/_data

Hinweis : Vorsicht in der Produktion und auch vor Ort! Sie müssen auch die vorhandenen Daten von /var/lib/docker/ An den neuen Speicherort verschieben, damit die Docker-Installation wie erwartet funktioniert.

Sie können Symlinks vom neuen Speicherort verwenden, wenn sich bestimmte Ordner an einem bestimmten Ort befinden sollen.

14
Hugo R

Ich habe den Speicherort von docker erfolgreich verschoben, indem ich den Inhalt von/var/lib/docker an einen neuen Speicherort verschoben und dann einen Symlink auf den neuen Speicherort gesetzt habe (ich habe diese Lösung von hier übernommen https : //askubuntu.com/questions/631450/change-data-directory-of-docker ):

Achtung - Diese Schritte hängen davon ab, dass Ihr aktuelles Verzeichnis/var/lib/docker ein tatsächliches Verzeichnis ist (kein Symlink zu einem anderen Speicherort).

1) Docker anhalten: service docker stop. Stellen Sie sicher, dass kein Docker-Prozess ausgeführt wird: ps aux | grep -i [d]ocker

2) Double Check Docker läuft wirklich nicht. Schauen Sie sich das aktuelle Docker-Verzeichnis an: ls /var/lib/docker/

2b) Backup erstellen - tar -zcC /var/lib docker > /mnt/pd0/var_lib_docker-backup-$(date +%s).tar.gz

3) Verschieben Sie das Verzeichnis/var/lib/docker in Ihre neue Partition: mv /var/lib/docker /mnt/pd0/docker

4) Erstelle einen Symlink: ln -s /mnt/pd0/docker /var/lib/docker

5) Werfen Sie einen Blick auf die Verzeichnisstruktur, um sicherzustellen, dass sie so aussieht wie vor dem mv: ls /var/lib/docker/ (Beachten Sie den abschließenden Schrägstrich)

6) Starten Sie die Docker-Sicherung service docker start

7) starte deine Container neu (löse den Symlink)

Arbeitete für mich auf Ubuntu 18.04.1 LTS auf einem Azure VM mit Docker 18.09.2

1
Codev