web-dev-qa-db-fra.com

Comment changer l'emplacement par défaut de la commande "docker create volume"?

Lors de la création de volumes via l'API de volume, c'est-à-dire que le modèle de volume de conteneur n'est désormais plus nécessairement la meilleure pratique:

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

Je voudrais, par exemple, que des volumes de docker existent dans/data (qui est monté dans un volume physique différent).

Ce n'est pas possible avec des liens symboliques, c'est possible avec des montures de liaison, mais je me demande s'il y a une configuration dans Docker pour changer l'emplacement par défaut pour chaque volume séparé.

22
dukeofgaming

2017: avec 17.05.0-ce (2017-05-04) , le PR 28696 déconseille --graph drapeau en faveur ou --data-root: commit 1ecaed

Le nom "graph" est un terme hérité d'il y a longtemps quand il y avait un répertoire à l'emplacement par défaut /var/lib/docker/graph.

Cependant, l'indicateur indiquerait le chemin du répertoire parent du répertoire "graph" qui contient non seulement des données d'image mais aussi des données pour les volumes, les conteneurs et les réseaux.
Dans la version la plus récente de docker, ce répertoire contient également des certificats d'état de cluster et de nœuds.

Avec problème 5922 et PR 5978 , la documentation a été mise à jour.

Exemple :

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

2016 (désormais obsolète)

Je ne connais qu'une option de menu fixe pour modifier /var/lib/docker lui-même, pas ses sous-dossiers (une partie de son "graphique" utilisé par un pilote de stockage de démon docker )

Voir démon docker "Options diverses" :

Docker prend en charge les liens logiciels pour le répertoire de données Docker (/var/lib/docker) et pour /var/lib/docker/tmp.
Le DOCKER_TMPDIR et le répertoire data peut être défini comme ceci:

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

Comme mentionné dans " Où sont stockées les images de docker sur la machine hôte? " (et cela s'appliquerait également aux conteneurs/volumes):

Le contenu du /var/lib/docker le répertoire varie selon sur le pilote que Docker utilise pour le stockage .

13
VonC

Vous pouvez changer l'endroit où Docker stocke ses fichiers, y compris les volumes, en modifiant l'un de ses paramètres de démarrage appelé --data-root.

Si vous utilisez systemd pour la gestion des services, le fichier se trouve généralement à /lib/systemd/system/docker.service. Modifiez le fichier en tant que tel:

# 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

Vous pouvez également modifier le fichier de configuration du démon Docker, qui est par défaut /etc/docker/daemon.json.

Redémarrez le démon Docker et vos volumes seront sous /new_location/volumes/{volume_name}/_data

Remarque : soyez prudent en production et aussi localement! Vous devez également déplacer les données existantes de /var/lib/docker/ au nouvel emplacement pour que votre installation Docker fonctionne comme prévu.

Vous pouvez utiliser des liens symboliques à partir du nouvel emplacement si vous souhaitez que des dossiers spécifiques soient à un endroit spécifique.

14
Hugo R

J'ai réussi à déplacer l'emplacement de stockage de docker en déplaçant le contenu de/var/lib/docker vers un nouvel emplacement, puis je place un lien symbolique pointant vers le nouvel emplacement (j'ai pris cette solution d'ici https: // askubuntu. com/questions/631450/change-data-directory-of-docker ):

Attention - Ces étapes dépendent du fait que votre/var/lib/docker actuel est un répertoire réel (pas un lien symbolique vers un autre emplacement).

1) Arrêter le docker: service docker stop. Vérifiez qu'aucun processus Docker n'est en cours d'exécution: ps aux | grep -i [d]ocker

2) Docker Double Check ne fonctionne vraiment pas. Jetez un œil au répertoire docker actuel: ls /var/lib/docker/

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

3) Déplacez le répertoire/var/lib/docker vers votre nouvelle partition: mv /var/lib/docker /mnt/pd0/docker

4) Créez un lien symbolique: ln -s /mnt/pd0/docker /var/lib/docker

5) Jetez un œil à la structure du répertoire pour vous assurer qu'elle ressemble à ce qu'elle était avant le mv: ls /var/lib/docker/ (Notez la barre oblique de fin)

6) Démarrez la sauvegarde de docker service docker start

7) Redémarrez vos conteneurs (résolvez le lien symbolique)

A travaillé pour moi sur Ubuntu 18.04.1 LTS sur un Azure VM avec Docker 18.09.2

1
Codev