¿Cómo cambiar el directorio de instalación de la imagen del acoplador?
183
Por lo que puedo decir, las imágenes de la ventana acoplable se instalan a /var/lib/dockermedida que se extraen. ¿Hay alguna manera de cambiar esta ubicación, como un volumen montado como /mnt?
Con versiones anteriores, puede cambiar el directorio base de almacenamiento de Docker (donde van el contenedor y las imágenes) utilizando la -gopción al iniciar el demonio Docker. (consultar docker --help) Puede hacer que esta configuración se aplique automáticamente cuando Docker se inicia al agregarla a / etc / default / docker
Siguiendo los consejos de los comentarios, utilizo la documentación de Docker systemd para mejorar esta respuesta. El siguiente procedimiento no requiere reiniciar y es mucho más limpio.
Primero cree el directorio y el archivo para la configuración personalizada:
Recientemente probé el procedimiento anterior con 17.09-ce en Fedora 25 y parece que no funciona. En lugar de esa simple modificación en /etc/docker/daemon.jsonhacer el truco:
{
"graph": "/mnt",
"storage-driver": "overlay"
}
A pesar del método, debe volver a cargar la configuración y reiniciar Docker:
Este enlace docs.docker.com/engine/admin/systemd explica cómo configurar Docker con systemd, que funciona para la distribución de Linux más reciente, como Ubuntu 16.04.
Joseph Hui
66
La docker infodeclaración probablemente esté desactualizada. En Ubuntu 16.04, la verificación para reconfigurado es sudo docker info | grep "Docker Root Dir". De lo contrario, buena respuesta, debería ser la aceptada;)
Guillaume Perrot
55
En la nueva versión de Linux (4.10) y Docker (docker-ce 17.06) la línea se debe cambiar de la siguiente manera: / usr / bin / dockerd -H fd: // --data-root = "/ mnt"
lorenzo-bettini
2
Si usted ve Docker Root Dir: /"/mnt"cuando se ejecuta docker info|grep "Docker Root Dir", usted tiene que reemplazar --data-root="/mnt"en --data-root=/mntel interior del archivodocker-storage.conf
Ser
62
Para las nuevas versiones de Docker, debemos usar data-rootcomo graphestá en desuso en v17.05.0: documentos oficiales en desuso
Edite /etc/docker/daemon.json(si no existe, créelo) e incluya:
Puede encontrar una explicación paso a paso más detallada (incluidos los datos en movimiento) usando Docker Storage con raíz de datos en: Publicación de blog
Como no he encontrado las instrucciones correctas para hacer esto en Fedora (EDITAR: la gente señaló en los comentarios que esto también debería funcionar en CentOS y Suse) (/ etc / default / docker no se usa allí), estoy agregando mi responde aquí:
Debe editar / etc / sysconfig / docker y agregar la opción -g en la variable OPTIONS. Si hay más de una opción, asegúrese de encerrarlas en "". En mi caso, ese archivo contenía:
OPTIONS=--selinux-enabled
entonces se convertiría
OPTIONS="--selinux-enabled -g /mnt"
Después de un reinicio ( systemctl restart docker), Docker debería usar el nuevo directorio
En CentOS 6.5 / 6.6 y probablemente 7, usa el mismo archivo / etc / sysconfig / docker, pero agrega los argumentos al nombre de la variable other_args.
dlaidlaw
La opción se llama DOCKER_OPTS ahora (docker versión 1.7.0).
nedim
66
Desde la versión 1.8 de Docker en adelante, el uso de los archivos de configuración de Docker en / etc / sysconfig está en desuso. En su lugar, debe usar los archivos de configuración desplegables systemd en etc / systemd / system / docker.service.d. Después de agregar o modificar un archivo desplegable mientras se ejecuta el servicio Docker, ejecute el comando systemctl daemon-reload para indicarle a systemd que vuelva a cargar la configuración del servicio. docs.oracle.com/cd/E52668_01/E54669/html/…
Esta es la OMI, la solución correcta y más directa, funcionó para mí.
Martin Dvorak el
2
funcionó como un encanto para mí, pero sin la barra inclinada final para el comando de enlace simbólico:sudo ln -s /path/to/new/docker/ /var/lib/docker
mi caso: centos7, último docker; Tuve que llamar a "systemctl status docker" para encontrar el archivo "docker.service" y agregué la opción "-g" como en la respuesta. Gracias
datdinhquoc
13
Copie y pegue la versión de la respuesta ganadora :)
Para Debian / Ubuntu o Fedora, probablemente pueda usar las otras respuestas. Pero si no tiene archivos debajo de /etc/default/dockero /etc/sysconfig/docker, y su sistema está ejecutando systemd, es posible que desee seguir esta respuesta con h3nrik . Estoy usando Arch, y esto funciona para mí.
Básicamente, debe configurar systemd para leer la nueva ubicación de la imagen de Docker como una variable de entorno y pasar esa variable de entorno al script de ejecución del demonio Docker.
Para completar, aquí está la respuesta de h3nrick:
¿Tienes un /lib/systemd/system/docker.servicearchivo?
Si es así, editar de manera que el servicio utiliza el estibador habitual /etc/default/dockercomo un archivo de entorno: EnvironmentFile=-/etc/default/docker.
En el /etc/default/dockerarchivo, luego agregue DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images".
Al final solo haz un systemctl daemon-reload && systemctl restart docker.
Para más información, consulte también la documentación .
No cree un enlace suave. Razones para ver mi comentario que publico antes ... ¡Puede tener problemas con los comandos 'docker rm'!
Suther
2
@Suther: ¿mayo? ¿Hay alguna situación en la que te encuentres en problemas o no? May es un poco impreciso para la documentación técnica, si me encuentro con un problema, quiero saber cuándo sucede exactamente eso, cómo se causa ese problema y cómo sería el resultado.
Hakre
4
Según lo recomendado por @mbarthelemy, esto se puede hacer a través de la -gopción al iniciar el dacker de Docker directamente.
Sin embargo, si Docker se inicia como un servicio del sistema, no se recomienda modificar el /etc/default/dockerarchivo. Hay una guía para esto ubicada aquí .
El enfoque correcto es crear un /etc/docker/daemon.jsonarchivo en sistemas Linux (o Mac) o %programdata%\docker\config\daemon.jsonen Windows. Si este archivo no se está utilizando para otra cosa, los siguientes campos deberían ser suficientes:
{
"graph": "/docker/daemon_files"
}
Esto supone que la nueva ubicación donde desea que Docker persista sus datos es /docker/daemon_files
En Fedora 26 y probablemente en muchas otras versiones, puede encontrar un error después de mover la ubicación de la carpeta base como se describió anteriormente. Esto es particularmente cierto si lo está trasladando a un lugar debajo de / home. Esto se debe a que SeLinux se activa y evita que el contenedor de Docker ejecute muchos de sus programas desde esta ubicación.
La solución corta es eliminar la opción --enable-selinux cuando agrega el parámetro -g.
En un servidor AWS Ubuntu 16.04 puse las imágenes de Docker en un EBS separado, montado en / home / ubuntu / kaggle /, debajo del directorio de docker
Este fragmento de mi script de inicialización funcionó correctamente
# 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
Para los usuarios de Mac en la versión 17.06.0-ce-mac19, simplemente puede mover la ubicación de la imagen del disco desde la interfaz de usuario en la opción de preferencias Simplemente cambie la ubicación de la imagen del disco y funcionará (haciendo clic en Mover imagen del disco ) y reiniciando el estibador Usando este enfoque pude usar mi disco duro externo para almacenar imágenes acoplables.
Respuestas:
Con versiones recientes de Docker, establecería el valor del
data-root
parámetro en su ruta personalizada, en/etc/docker/daemon.json
(de acuerdo con https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file ).Con versiones anteriores, puede cambiar el directorio base de almacenamiento de Docker (donde van el contenedor y las imágenes) utilizando la
-g
opción al iniciar el demonio Docker. (consultardocker --help
) Puede hacer que esta configuración se aplique automáticamente cuando Docker se inicia al agregarla a / etc / default / dockerfuente
-g
opción a / etc / defaults / docker en lugar de modificar el archivo Upstart, vea mi respuesta.DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
/etc/default/docker
archivo.graph
atributo en daemon.json está en desuso a partir de v17.05.0, usedata-root
en su lugar, cf. stackoverflow.com/a/50217666/743507Siguiendo los consejos de los comentarios, utilizo la documentación de Docker systemd para mejorar esta respuesta. El siguiente procedimiento no requiere reiniciar y es mucho más limpio.
Primero cree el directorio y el archivo para la configuración personalizada:
Para la versión acoplable anterior a la pasta 17.06-ce :
Para la ventana acoplable después de la pasta de 17.06 ce :
Método alternativo a través de
daemon.json
Recientemente probé el procedimiento anterior con 17.09-ce en Fedora 25 y parece que no funciona. En lugar de esa simple modificación en
/etc/docker/daemon.json
hacer el truco:A pesar del método, debe volver a cargar la configuración y reiniciar Docker:
Para confirmar que Docker se reconfiguró:
En la versión reciente (17.03) se requiere un comando diferente:
La salida debería verse así:
O:
Luego, puede eliminar de forma segura el antiguo almacenamiento de Docker:
fuente
docker info
declaración probablemente esté desactualizada. En Ubuntu 16.04, la verificación para reconfigurado essudo docker info | grep "Docker Root Dir"
. De lo contrario, buena respuesta, debería ser la aceptada;)Docker Root Dir: /"/mnt"
cuando se ejecutadocker info|grep "Docker Root Dir"
, usted tiene que reemplazar--data-root="/mnt"
en--data-root=/mnt
el interior del archivodocker-storage.conf
Para las nuevas versiones de Docker, debemos usar
data-root
comograph
está en desuso en v17.05.0: documentos oficiales en desusoEdite
/etc/docker/daemon.json
(si no existe, créelo) e incluya:Luego reinicie Docker con:
fuente
Como no he encontrado las instrucciones correctas para hacer esto en Fedora (EDITAR: la gente señaló en los comentarios que esto también debería funcionar en CentOS y Suse) (/ etc / default / docker no se usa allí), estoy agregando mi responde aquí:
Debe editar / etc / sysconfig / docker y agregar la opción -g en la variable OPTIONS. Si hay más de una opción, asegúrese de encerrarlas en "". En mi caso, ese archivo contenía:
entonces se convertiría
Después de un reinicio (
systemctl restart docker
), Docker debería usar el nuevo directoriofuente
No utilice un enlace simbólico para mover la carpeta acoplable a / mnt (por ejemplo). Esto puede causar problemas con el comando docker rm .
Mejor use la opción -g para docker. En Ubuntu puedes configurarlo permanentemente en /etc/default/docker.io. Mejore o reemplace la línea DOCKER_OPTS.
Aquí un ejemplo: `DOCKER_OPTS =" - g / mnt / somewhere / else / docker / "
fuente
docker rm
al usar un enlace simbólico?Ubuntu 16.04
stackoverflow.com/a/30219552/977622 para que funcioneUna forma mucho más fácil de hacerlo:
Detener el servicio de acoplador
Mover el directorio de acopladores existente a una nueva ubicación
Crear enlace simbólico
Iniciar el servicio de acoplador
fuente
sudo ln -s /path/to/new/docker/ /var/lib/docker
Esta solución funciona en Red Hat 7.2 y Docker 1.12.0
Edite el archivo /lib/systemd/system/docker.service en su editor de texto.
agregue -g / ruta / a / docker / al final de la directiva ExecStart . La línea completa debería verse así.
Ejecute el siguiente comando
Ejecute el comando para verificar el directorio acoplable
Si tiene el archivo / etc / sysconfig / docker en Red Hat o docker 1.7.1, verifique esta respuesta.
fuente
Copie y pegue la versión de la respuesta ganadora :)
Cree este archivo solo con este contenido:
$ sudo vi /etc/docker/daemon.json
Probado
Ubuntu 16.04.2 LTS
en Docker1.12.6
fuente
graph
atributo en daemon.json está en desuso a partir de v17.05.0, usedata-root
en su lugar, cf. stackoverflow.com/a/50217666/743507En CentOS 6.5
agregue la siguiente línea
luego guarde el archivo y vuelva a iniciar la ventana acoplable
y hará un archivo de repositorio en
/data/docker
fuente
Para Debian / Ubuntu o Fedora, probablemente pueda usar las otras respuestas. Pero si no tiene archivos debajo de
/etc/default/docker
o/etc/sysconfig/docker
, y su sistema está ejecutando systemd, es posible que desee seguir esta respuesta con h3nrik . Estoy usando Arch, y esto funciona para mí.Básicamente, debe configurar systemd para leer la nueva ubicación de la imagen de Docker como una variable de entorno y pasar esa variable de entorno al script de ejecución del demonio Docker.
Para completar, aquí está la respuesta de h3nrick:
¿Tienes un
/lib/systemd/system/docker.service
archivo?Si es así, editar de manera que el servicio utiliza el estibador habitual
/etc/default/docker
como un archivo de entorno:EnvironmentFile=-/etc/default/docker
.En el
/etc/default/docker
archivo, luego agregueDOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"
.Al final solo haz un
systemctl daemon-reload && systemctl restart docker
.Para más información, consulte también la documentación .
fuente
Una solución mucho más simple es crear un punto de enlace flexible a lo que desee, como
Funciona para mí en mi servidor CentOS 6.5.
fuente
Según lo recomendado por @mbarthelemy, esto se puede hacer a través de la
-g
opción al iniciar el dacker de Docker directamente.Sin embargo, si Docker se inicia como un servicio del sistema, no se recomienda modificar el
/etc/default/docker
archivo. Hay una guía para esto ubicada aquí .El enfoque correcto es crear un
/etc/docker/daemon.json
archivo en sistemas Linux (o Mac) o%programdata%\docker\config\daemon.json
en Windows. Si este archivo no se está utilizando para otra cosa, los siguientes campos deberían ser suficientes:Esto supone que la nueva ubicación donde desea que Docker persista sus datos es
/docker/daemon_files
fuente
En openSUSE Leap 42.1
Tenga en cuenta que DOCKER_OPTS estaba inicialmente vacío y todo lo que hice fue agregar el argumento para hacer que Docker use mi nuevo directorio
fuente
En Fedora 26 y probablemente en muchas otras versiones, puede encontrar un error después de mover la ubicación de la carpeta base como se describió anteriormente. Esto es particularmente cierto si lo está trasladando a un lugar debajo de / home. Esto se debe a que SeLinux se activa y evita que el contenedor de Docker ejecute muchos de sus programas desde esta ubicación.
La solución corta es eliminar la opción --enable-selinux cuando agrega el parámetro -g.
fuente
En un servidor AWS Ubuntu 16.04 puse las imágenes de Docker en un EBS separado, montado en / home / ubuntu / kaggle /, debajo del directorio de docker
Este fragmento de mi script de inicialización funcionó correctamente
fuente
Para los usuarios de Mac en la versión 17.06.0-ce-mac19, simplemente puede mover la ubicación de la imagen del disco desde la interfaz de usuario en la opción de preferencias Simplemente cambie la ubicación de la imagen del disco y funcionará (haciendo clic en Mover imagen del disco ) y reiniciando el estibador Usando este enfoque pude usar mi disco duro externo para almacenar imágenes acoplables.
fuente