D'après ce que je peux dire, les images docker sont installées au /var/lib/docker
fur et à mesure qu'elles sont extraites. Existe-t-il un moyen de changer cet emplacement, comme un volume monté comme /mnt
?
D'après ce que je peux dire, les images docker sont installées au /var/lib/docker
fur et à mesure qu'elles sont extraites. Existe-t-il un moyen de changer cet emplacement, comme un volume monté comme /mnt
?
Réponses:
Avec les versions récentes de Docker, vous définiriez la valeur du data-root
paramètre sur votre chemin personnalisé, dans /etc/docker/daemon.json
(selon https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file ).
Avec les anciennes versions, vous pouvez modifier le répertoire de base de stockage de Docker (où le conteneur et les images vont) à l'aide de l' -g
option lors du démarrage du démon Docker. (vérifier docker --help
). Vous pouvez appliquer ce paramètre automatiquement au démarrage de Docker en l'ajoutant à / etc / default / docker
-g
option à / etc / defaults / docker au lieu de modifier le fichier Upstart, voir ma réponse.
DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
graph
attribut dans daemon.json est obsolète à partir de la version 17.05.0, utilisez à la data-root
place, cf. stackoverflow.com/a/50217666/743507
Suite aux conseils des commentaires, j'utilise la documentation Docker systemd pour améliorer cette réponse. La procédure ci-dessous ne nécessite pas de redémarrage et est beaucoup plus propre.
Créez d'abord un répertoire et un fichier pour une configuration personnalisée:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
Pour la version docker antérieure à la pâte 17.06-ce :
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"
Pour docker après pâte 17.06-ce :
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"
daemon.json
J'ai récemment essayé la procédure ci-dessus avec 17.09-ce sur Fedora 25 et cela semble ne pas fonctionner. Au lieu de cette simple modification, /etc/docker/daemon.json
faites l'affaire:
{
"graph": "/mnt",
"storage-driver": "overlay"
}
Malgré la méthode, vous devez recharger la configuration et redémarrer Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
Pour confirmer que Docker a été reconfiguré:
docker info|grep "loop file"
Dans la version récente (17.03), une commande différente est requise:
docker info|grep "Docker Root Dir"
La sortie devrait ressembler à ceci:
Data loop file: /mnt/devicemapper/devicemapper/data
Metadata loop file: /mnt/devicemapper/devicemapper/metadata
Ou:
Docker Root Dir: /mnt
Ensuite, vous pouvez supprimer en toute sécurité l'ancien stockage Docker:
rm -rf /var/lib/docker
docker info
déclaration est probablement dépassée. Sur Ubuntu 16.04, la vérification de la reconfiguration est sudo docker info | grep "Docker Root Dir"
. Sinon, bonne réponse, devrait être celle acceptée;)
Docker Root Dir: /"/mnt"
lorsque vous exécutez docker info|grep "Docker Root Dir"
, vous devez remplacer --data-root="/mnt"
à l' --data-root=/mnt
intérieur du fichierdocker-storage.conf
Pour les nouvelles versions de Docker, nous devons utiliser data-root
tel graph
quel dans la version 17.05.0: documents officiels obsolètes
Modifiez /etc/docker/daemon.json
(s'il n'existe pas, créez-le) et incluez:
{
"data-root": "/new/path/to/docker-data"
}
Ensuite, redémarrez Docker avec:
sudo systemctl daemon-reload
sudo systemctl restart docker
Comme je n'ai pas trouvé les instructions correctes pour faire cela dans Fedora (EDIT: les gens ont souligné dans les commentaires que cela devrait également fonctionner sur CentOS et Suse) (/ etc / default / docker n'est pas utilisé ici), j'ajoute mon répondez ici:
Vous devez éditer / etc / sysconfig / docker et ajouter l'option -g dans la variable OPTIONS. S'il y a plus d'une option, assurez-vous de les mettre entre "". Dans mon cas, ce fichier contenait:
OPTIONS=--selinux-enabled
donc ça deviendrait
OPTIONS="--selinux-enabled -g /mnt"
Après un redémarrage ( systemctl restart docker
), Docker doit utiliser le nouveau répertoire
N'utilisez pas de lien symbolique pour déplacer le dossier Docker vers / mnt (par exemple). Cela peut entraîner des problèmes avec la commande docker rm .
Mieux vaut utiliser l'option -g pour docker. Sur Ubuntu, vous pouvez le définir de manière permanente dans /etc/default/docker.io. Améliorez ou remplacez la ligne DOCKER_OPTS.
Voici un exemple: `DOCKER_OPTS =" - g / mnt / quelque part / autre / docker / "
docker rm
lors de l'utilisation d'un lien symbolique?
Ubuntu 16.04
stackoverflow.com/a/30219552/977622 pour le faire fonctionner
Arrêter le service docker
sudo systemctl stop docker
Déplacer le répertoire Docker existant vers un nouvel emplacement
sudo mv /var/lib/docker/ /path/to/new/docker/
Créer un lien symbolique
sudo ln -s /path/to/new/docker/ /var/lib/docker
Démarrer le service docker
sudo systemctl start docker
sudo ln -s /path/to/new/docker/ /var/lib/docker
Cette solution fonctionne sur Red Hat 7.2 et Docker 1.12.0
Modifiez le fichier /lib/systemd/system/docker.service dans votre éditeur de texte.
ajoutez -g / chemin / vers / docker / à la fin de la directive ExecStart . La ligne complète devrait ressembler à ceci.
ExecStart=/usr/bin/dockerd -g /path/to/docker/
Exécutez la commande ci-dessous
systemctl daemon-reload
systemctl restart docker
Exécutez la commande pour vérifier le répertoire docker
docker info | grep "loop file\|Dir"
Si vous avez le fichier / etc / sysconfig / docker dans Red Hat ou docker 1.7.1, cochez cette réponse.
Copiez et collez la version de la réponse gagnante :)
Créez ce fichier avec uniquement ce contenu:
$ sudo vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
Testé Ubuntu 16.04.2 LTS
dans docker1.12.6
graph
attribut dans daemon.json est obsolète à partir de la version 17.05.0, utilisez à la data-root
place, cf. stackoverflow.com/a/50217666/743507
Dans CentOS 6.5
service docker stop
mkdir /data/docker (new directory)
vi /etc/sysconfig/docker
ajouter la ligne suivante
other_args=" -g /data/docker -p /var/run/docker.pid"
puis enregistrez le fichier et redémarrez le docker
service docker start
et créera un fichier de référentiel dans /data/docker
Pour Debian / Ubuntu ou Fedora, vous pouvez probablement utiliser les autres réponses. Mais si vous n'avez pas de fichiers sous /etc/default/docker
ou /etc/sysconfig/docker
et que votre système exécute systemd, vous pouvez suivre cette réponse de h3nrik . J'utilise Arch et cela fonctionne pour moi.
Fondamentalement, vous devez configurer systemd pour lire le nouvel emplacement de l'image Docker en tant que variable d'environnement et transmettre cette variable d'environnement dans le script d'exécution du démon Docker.
Pour être complet, voici la réponse de h3nrick:
As tu un /lib/systemd/system/docker.service
dossier?
Si tel est le cas, modifiez-le pour que le service Docker utilise l'habituel /etc/default/docker
comme fichier d'environnement:EnvironmentFile=-/etc/default/docker
.
Dans le /etc/default/docker
fichier puis ajoutez DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"
.
À la fin, faites simplement un systemctl daemon-reload && systemctl restart docker
.
Pour plus d'informations, veuillez également consulter la documentation .
Une solution beaucoup plus simple consiste à créer un point de lien souple vers ce que vous voulez, tel que
link -s /var/lib/docker /mnt/whatever
Cela fonctionne pour moi sur mon serveur CentOS 6.5.
Comme recommandé par @mbarthelemy, cela peut être fait via l' -g
option lors du démarrage direct du démon docker.
Cependant, si docker est démarré en tant que service système, il n'est pas recommandé de modifier le /etc/default/docker
fichier. Il y a une directive à ce sujet située ici .
La bonne approche consiste à créer un /etc/docker/daemon.json
fichier sur les systèmes Linux (ou Mac) ou %programdata%\docker\config\daemon.json
sous Windows. Si ce fichier n'est utilisé pour rien d'autre, les champs suivants devraient suffire:
{
"graph": "/docker/daemon_files"
}
Cela suppose que le nouvel emplacement où vous souhaitez que docker conserve ses données est /docker/daemon_files
Sur openSUSE Leap 42.1
$cat /etc/sysconfig/docker
## Path : System/Management
## Description : Extra cli switches for docker daemon
## Type : string
## Default : ""
## ServiceRestart : docker
#
DOCKER_OPTS="-g /media/data/installed/docker"
Notez que DOCKER_OPTS était initialement vide et tout ce que j'ai fait a été d'ajouter l'argument pour que docker utilise mon nouveau répertoire
Sur Fedora 26 et probablement de nombreuses autres versions, vous pouvez rencontrer une erreur après avoir déplacé l'emplacement de votre dossier de base comme décrit ci-dessus. Cela est particulièrement vrai si vous le déplacez quelque part sous / home. En effet, SeLinux entre en action et empêche le conteneur docker d'exécuter plusieurs de ses programmes à partir de cet emplacement.
La solution courte consiste à supprimer l'option --enable-selinux lorsque vous ajoutez le paramètre -g.
Sur un serveur AWS Ubuntu 16.04, j'ai placé les images Docker sur un EBS séparé, monté sur / home / ubuntu / kaggle /, sous le répertoire docker
Cet extrait de mon script d'initialisation a fonctionné correctement
# where are the images initially stored?
sudo docker info | grep "Root Dir"
# ... not where I want them
# modify the configuration files to change to image location
# NOTE this generates an error
# WARNING: Usage of loopback devices is strongly discouraged for production use.
# Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
# see /programming/31620825/
# warning-of-usage-of-loopback-devices-is-strongly-discouraged-for-production-use
sudo sed -i ' s@#DOCKER_OPTS=.*@DOCKER_OPTS="-g /home/ubuntu/kaggle/docker"@ ' /etc/default/docker
sudo chmod -R ugo+rw /lib/systemd/system/docker.service
sudo cp /lib/systemd/system/docker.service /etc/systemd/system/
sudo chmod -R ugo+rw /etc/systemd/system/
sudo sed -i ' s@ExecStart.*@ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://@ ' /etc/systemd/system/docker.service
sudo sed -i '/ExecStart/a EnvironmentFile=-/etc/default/docker' /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info | grep "Root Dir"
# now they're where I want them
Pour les utilisateurs de Mac dans la version 17.06.0-ce-mac19, vous pouvez simplement déplacer l'emplacement de l'image du disque de l'interface utilisateur dans l'option de préférences Changez simplement l'emplacement de l'image du disque et cela fonctionnera (en cliquant sur Déplacer l'image du disque ) et en redémarrant le docker. En utilisant cette approche, j'ai pu utiliser mon disque dur externe pour stocker des images de docker.