
Intento almacenar mi configuración de Docker, imágenes, contenedores, etc. en un almacenamiento externo. Siguiendo este tutorial https://www.howtogeek.com/devops/how-to-store-docker-images-and-containers-on-an-external-drive/
He creado /etc/docker/daemon.json:
{
"data-root": "/media/user/MYUSB/docker-data"
}
Pero cuando conecto mi almacenamiento USB (MYUSB) e inicio el servicio Docker, éste falla.
$ sudo service docker start
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
$ sudo dockerd --debug
INFO[2023-07-06T12:36:29.650356567+02:00] Starting up
could not create or set daemon root permissions: /media/user/MYUSB/docker-data: chown /media/user/MYUSB/docker-data: operation not permitted
Y si reinicio la computadora, el servicio creará una nueva carpeta MYSUB limpia para almacenar los datos, y el sistema montará mi almacenamiento USB real como MYUSB1 (y no lo usará para almacenar los datos de la ventana acoplable).
Mi sistema monta mi llave USB y los permisos están configurados en usuario:usuario, y no en root:root, así que tal vez provenga de aquí. Pero me parece curioso que el servicio Docker (que supongo que se ejecuta mediante root) no pueda utilizar un almacenamiento usuario:usuario.
Si intento montar el usb manualmente con el usuario root. La carpeta /media/user/MYUSB que creo está configurada como raíz: raíz, hasta que monte el USB en ella: su propietario cambia a usuario: usuario.
Estoy un poco desconcertado porque parece que soy el único al que se le ha ocurrido este problema en Internet, aunque no parece ser una configuración inusual.
Respuesta1
Al probar algunas cosas, deduzco que su unidad flash USB tiene FAT32 u otro sistema de archivos que no admite permisos POSIX. No puedes usar un sistema de archivos como ese con Docker. ¡Pero eso no es todo!
Los sistemas de archivos montados automáticamente tampoco son adecuados para Docker, porque se montan connosuidoynodev. No se puede instalar correctamente un sistema de archivos raíz de Linux (que es lo que comúnmente se encuentra dentro de las imágenes de Docker). Puedes verificarlos usando mount | grep media
. (El montaje automático normalmente funciona usandoudisks2estos días.)
Primero, debes colocar un sistema de archivos apropiado en tu unidad flash (comoext4).
Entonces, debes asegurarte de queudisks2no monta el sistema de archivos (con opciones inapropiadas y demasiado tarde). Puedes usar unudevregla para que ignore el sistema de archivos:
SUBSYSTEM=="block", ENV{ID_FS_UUID}=="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX", ENV{UDISKS_IGNORE}="1"
Pondrías esto en un archivo llamado así /etc/udev/rules.d/99-ignore-my-usb.rules
. Puede encontrar el UUID del sistema de archivos para su sistema de archivos recién creado usando blkid
.
Luego, crearía una entrada adecuada /etc/fstab
(nuevamente usando el UUID) para asegurarse de que la unidad flash USB se monte con suficiente antelación. Tampoco es necesario modificar ninguna configuración de Docker, simplemente móntela en /var/lib/docker
, el directorio de datos predeterminado de Docker. Algo como esto:
UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX /var/lib/docker ext4 relatime 0 0
Para asegurarse de que todo funcione bien, simplemente reinicie. Docker debería iniciarse y mount
confirmar que la unidad flash está realmente montada en /var/lib/docker
.
Su unidad flash Docker es entonces portátil, más o menos. No debes simplemente eliminarlo cuando la PC esté funcionando. Primero detenga Docker, desmóntelo y solo luego elimínelo. De lo contrario, corre el riesgo de dañar el sistema de archivos y, por supuesto, Docker eventualmente fallará.