Da quello che posso dire, le immagini della finestra mobile vengono installate /var/lib/docker
mentre vengono estratte. C'è un modo per cambiare questa posizione, come ad esempio un volume montato /mnt
?
Da quello che posso dire, le immagini della finestra mobile vengono installate /var/lib/docker
mentre vengono estratte. C'è un modo per cambiare questa posizione, come ad esempio un volume montato /mnt
?
Risposte:
Con le versioni recenti di Docker, imposteresti il valore del data-root
parametro sul tuo percorso personalizzato, in /etc/docker/daemon.json
(secondo https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file ).
Con le versioni precedenti, è possibile modificare la directory di base di archiviazione di Docker (dove vanno il contenitore e le immagini) utilizzando l' -g
opzione all'avvio del daemon Docker. (controlla docker --help
). È possibile applicare automaticamente questa impostazione all'avvio di Docker aggiungendola a / etc / default / docker
-g
opzione a / etc / defaults / docker invece di modificare il file Upstart, vedi la mia risposta.
DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
graph
attributo in daemon.json è obsoleto a partire dalla versione 17.05.0, utilizzare data-root
invece, cfr. stackoverflow.com/a/50217666/743507
Seguendo i consigli dei commenti, utilizzo la documentazione di Systemer Docker per migliorare questa risposta. Di seguito la procedura non richiede il riavvio ed è molto più pulita.
Innanzitutto creare directory e file per la configurazione personalizzata:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
Per la versione docker precedente alla pasta 17.06-ce :
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"
Per docker dopo la pasta 17.06-ce :
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"
daemon.json
Di recente ho provato sopra la procedura con 17.09-ce su Fedora 25 e sembra non funzionare. Invece di quella semplice modifica, /etc/docker/daemon.json
fai il trucco:
{
"graph": "/mnt",
"storage-driver": "overlay"
}
Nonostante il metodo devi ricaricare la configurazione e riavviare Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
Per confermare che Docker è stato riconfigurato:
docker info|grep "loop file"
Nella versione recente (17.03) sono richiesti diversi comandi:
docker info|grep "Docker Root Dir"
L'output dovrebbe essere simile al seguente:
Data loop file: /mnt/devicemapper/devicemapper/data
Metadata loop file: /mnt/devicemapper/devicemapper/metadata
O:
Docker Root Dir: /mnt
Quindi puoi rimuovere in sicurezza la vecchia memoria Docker:
rm -rf /var/lib/docker
docker info
affermazione è probabilmente obsoleta. Su Ubuntu 16.04, il controllo per riconfigurato è sudo docker info | grep "Docker Root Dir"
. Altrimenti, una buona risposta, dovrebbe essere quella accettata;)
Docker Root Dir: /"/mnt"
quando si corre docker info|grep "Docker Root Dir"
, si deve sostituire --data-root="/mnt"
in --data-root=/mnt
all'interno del filedocker-storage.conf
Per le nuove versioni della finestra mobile dobbiamo usare data-root
come graph
è deprecato in v17.05.0: documenti deprecati ufficiali
Modifica /etc/docker/daemon.json
(se non esiste, crealo) e includi:
{
"data-root": "/new/path/to/docker-data"
}
Quindi riavviare Docker con:
sudo systemctl daemon-reload
sudo systemctl restart docker
Dal momento che non ho trovato le istruzioni corrette per farlo in Fedora (EDIT: le persone hanno sottolineato nei commenti che questo dovrebbe funzionare anche su CentOS e Suse) (/ etc / default / docker non viene utilizzato lì), sto aggiungendo il mio rispondi qui:
Devi modificare / etc / sysconfig / docker e aggiungere l'opzione -g nella variabile OPTIONS. Se esiste più di un'opzione, assicurati di racchiuderla tra "". Nel mio caso, quel file conteneva:
OPTIONS=--selinux-enabled
così sarebbe diventato
OPTIONS="--selinux-enabled -g /mnt"
Dopo un riavvio ( systemctl restart docker
), Docker dovrebbe utilizzare la nuova directory
Non utilizzare un collegamento simbolico per spostare la cartella della finestra mobile in / mnt (ad esempio). Ciò potrebbe causare problemi con il comando docker rm .
Meglio usare l'opzione -g per la finestra mobile. Su Ubuntu puoi impostarlo permanentemente in /etc/default/docker.io. Migliora o sostituisci la riga DOCKER_OPTS.
Ecco un esempio: `DOCKER_OPTS =" - g / mnt / somewhere / else / docker / "
docker rm
quando uso un collegamento simbolico?
Ubuntu 16.04
stackoverflow.com/a/30219552/977622 per farlo funzionare
Interrompere il servizio docker
sudo systemctl stop docker
Sposta la directory docker esistente in una nuova posizione
sudo mv /var/lib/docker/ /path/to/new/docker/
Crea link simbolico
sudo ln -s /path/to/new/docker/ /var/lib/docker
Avviare il servizio docker
sudo systemctl start docker
sudo ln -s /path/to/new/docker/ /var/lib/docker
Questa soluzione funziona su Red Hat 7.2 e Docker 1.12.0
Modifica il file /lib/systemd/system/docker.service nel tuo editor di testo.
aggiungi -g / path / a / docker / alla fine della direttiva ExecStart . La linea completa dovrebbe apparire così.
ExecStart=/usr/bin/dockerd -g /path/to/docker/
Eseguire il comando seguente
systemctl daemon-reload
systemctl restart docker
Eseguire il comando per controllare la directory docker
docker info | grep "loop file\|Dir"
Se hai / etc / sysconfig / docker in Red Hat o docker 1.7.1 controlla questa risposta.
Copia e incolla la versione della risposta del vincitore :)
Crea questo file con solo questo contenuto:
$ sudo vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
Testato Ubuntu 16.04.2 LTS
nella finestra mobile1.12.6
graph
attributo in daemon.json è obsoleto a partire dalla versione 17.05.0, utilizzare data-root
invece, cfr. stackoverflow.com/a/50217666/743507
In CentOS 6.5
service docker stop
mkdir /data/docker (new directory)
vi /etc/sysconfig/docker
aggiungi la seguente riga
other_args=" -g /data/docker -p /var/run/docker.pid"
quindi salva il file e riavvia la finestra mobile
service docker start
e farà il file repository in /data/docker
Per Debian / Ubuntu o Fedora, puoi probabilmente usare le altre risposte. Ma se non hai file sotto /etc/default/docker
o /etc/sysconfig/docker
e il tuo sistema esegue systemd, potresti voler seguire questa risposta da h3nrik . Sto usando Arch, e questo funziona per me.
Fondamentalmente, è necessario configurare systemd per leggere la nuova posizione dell'immagine della finestra mobile come variabile di ambiente e passare quella variabile di ambiente nello script di esecuzione del demone Docker.
Per completezza, ecco la risposta di h3nrick:
Hai un /lib/systemd/system/docker.service
file?
In tal caso, modificare in modo che il servizio Docker utilizza il solito /etc/default/docker
come un file di ambiente: EnvironmentFile=-/etc/default/docker
.
Nel /etc/default/docker
file quindi aggiungi DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"
.
Alla fine basta fare un systemctl daemon-reload && systemctl restart docker
.
Per ulteriori informazioni, consultare anche la documentazione .
Una soluzione molto più semplice è quella di creare un punto di collegamento morbido a qualsiasi cosa tu voglia, come ad esempio
link -s /var/lib/docker /mnt/whatever
Funziona per me sul mio server CentOS 6.5.
Come raccomandato da @mbarthelemy questo può essere fatto tramite l' -g
opzione quando si avvia direttamente il daemon docker.
Tuttavia, se la finestra mobile viene avviata come servizio di sistema, non è consigliabile modificare il /etc/default/docker
file. C'è una linea guida per questo situato qui .
L'approccio corretto è quello di creare un /etc/docker/daemon.json
file su sistemi Linux (o Mac) o %programdata%\docker\config\daemon.json
su Windows. Se questo file non viene utilizzato per nient'altro, dovrebbero essere sufficienti i seguenti campi:
{
"graph": "/docker/daemon_files"
}
Ciò presuppone che la nuova posizione in cui si desidera che la finestra mobile permetta di conservare i suoi dati /docker/daemon_files
Su 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"
Nota che DOCKER_OPTS era inizialmente vuoto e tutto ciò che ho fatto è stato aggiungere l'argomento per fare in modo che la finestra mobile utilizzi la mia nuova directory
Su Fedora 26 e probabilmente su molte altre versioni, potresti riscontrare un errore dopo aver spostato la posizione della cartella di base come descritto sopra. Ciò è particolarmente vero se lo stai spostando da qualche parte sotto / home. Questo perché SeLinux entra in funzione e impedisce al contenitore docker di eseguire molti dei suoi programmi da questa posizione.
La soluzione breve è rimuovere l'opzione --enable-selinux quando si aggiunge il parametro -g.
Su un server AWS Ubuntu 16.04 ho inserito le immagini Docker su un EBS separato, montato su / home / ubuntu / kaggle /, sotto la directory docker
Questo frammento del mio script di inizializzazione ha funzionato correttamente
# 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
Per gli utenti Mac nella versione 17.06.0-ce-mac19 puoi semplicemente spostare la posizione dell'immagine disco dall'interfaccia utente nell'opzione preferenze Basta cambiare la posizione dell'immagine disco e funzionerà (facendo clic su Sposta immagine disco ) e riavviando la finestra mobile. Utilizzando questo approccio sono stato in grado di utilizzare il mio hardisk esterno per la memorizzazione di immagini docker.