.png)
Quiero crear un contenedor Docker que tenga un volumen montado desde un directorio creado por el usuario en la raíz del host Docker. El host es una instancia EC2 de Ubuntu.
El error
Me gustaría montar el /data
directorio siguiente en un contenedor Docker, pero aparece el error:
ubuntu:~$ ls -l /
total 120
drwxr-xr-x 25 root root 4096 Aug 10 20:51 ./
drwxr-xr-x 25 root root 4096 Aug 10 20:51 ../
drwxr-xr-x 2 root root 4096 Jul 22 13:50 bin/
drwxr-xr-x 3 root root 4096 Jul 22 13:50 boot/
drwxr-xr-x 4 ubuntu ubuntu 4096 Aug 10 19:58 data/
...
drwxr-xr-x 8 root root 4096 May 30 12:19 home/
...
drwxr-xr-x 3 root root 4096 Jun 20 13:39 mnt/
...
drwxr-xr-x 12 root root 4096 Jun 12 01:03 usr/
ubuntu:~$ docker run -it --rm -v /data:/data alpine
docker: Error response from daemon: error while creating mount source path '/data': mkdir /data: read-only file system.
El mismo comando funciona si uso un directorio que viene con la instancia (por ejemplo /usr
):
ubuntu:~$ docker run -it --rm -v /usr:/data alpine
/ # ls /data
bin games include lib lib32 local sbin share src
información adicional
Recibo el mismo error, incluso si hago lo siguiente:
- Usando
--mount
en lugar de-v
, incluso con lareadonly
opción. - Ejecute el comando anterior con
sudo
. - Se cambiaron los permisos en
/
undata
directorio a777
- Cambió de propietario de
ubuntu
aroot
- Monte un subdirectorio como
/data/subdir
.
El df
comando indica que no hay montajes especiales en la raíz de la instancia:
ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.9G 0 7.9G 0% /dev
tmpfs 1.6G 872K 1.6G 1% /run
/dev/xvda1 194G 180G 14G 93% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/loop0 132M 132M 0 100% /snap/docker/796
/dev/loop2 25M 25M 0 100% /snap/amazon-ssm-agent/4046
/dev/loop3 56M 56M 0 100% /snap/core18/2128
/dev/loop1 100M 100M 0 100% /snap/core/11316
/dev/loop4 100M 100M 0 100% /snap/core/11420
/dev/loop5 56M 56M 0 100% /snap/core18/2074
/dev/loop6 34M 34M 0 100% /snap/amazon-ssm-agent/3552
s3fs 256T 0 256T 0% /mnt/s3
tmpfs 1.6G 0 1.6G 0% /run/user/1000
El demonio acoplable se ejecuta como root:
ubuntu:~/$ ps -ef | grep dockerd
root 964 1 1 19:49 ? 00:00:55 dockerd --group docker --exec-root=/run/snap.docker --data-root=/var/snap/docker/common/var-lib-docker --pidfile=/run/snap.docker/docker.pid --config-file=/var/snap/docker/796/config/daemon.json
root 1302 1 0 19:49 ? 00:00:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ubuntu 6868 2649 0 21:20 pts/1 00:00:00 grep --color=auto dockerd
Gracias de antemano. Este es un problema desconcertante y hubiera pensado que sería fácil en Docker y AWS/EC2.
Respuesta1
Nota:Esta respuesta se aplica sólo a Ubuntu (y, hasta cierto punto, a las distribuciones derivadas). No debe aplicarse a ninguna otra distribución.
La causa principal del problema es que instaló y ejecutó Docker en un abrir y cerrar de ojos, y la mayoría de las personas no deberían ejecutarlo de esta manera. Cuando se inicia un programa confinado por snap, snapd crea un contenedor para ejecutar el programa, y solo los archivos a los que se podía acceder cuando se inició el programa serán accesibles para el programa. Esto incluye su nuevo directorio /data
, que no existe en el contenedor instantáneo en el que se ejecuta Docker, razón por la cual Docker intenta (y falla) crearlo.
La versión de Docker incluida con Ubuntu tampoco debe usarse, ya que no se mantiene actualizada. (Realmente deberían mantenerlo actualizado o eliminarlo por completo, pero no cuenten con que cualquiera de las dos cosas suceda pronto).
La mayoría de la gente debería usarDocker de los repositorios oficiales de Dockerpara evitar una amplia variedad de problemas que surgen con los paquetes acoplables de Ubuntu.