GNU/Linux >> Tutoriales Linux >  >> Linux

Ejecutando docker en Ubuntu:el volumen de host montado no se puede escribir desde el contenedor

Si tu uid en el host (id -u ) no es lo mismo que el uid del usuario en el contenedor docker (a menudo "docker"), entonces puede tener este problema. Puedes probar:

  1. Hacer que los UID sean iguales entre su usuario y el usuario en el contenedor acoplable.
  2. Configurar los permisos de grupo en el directorio para que se pueda escribir en un grupo al que pertenezcan usted y Docker.
  3. También puedes usar la opción nuclear:

chmod a+rwx -R project-dir/

La opción nuclear hará que tu git el espacio de trabajo está sucio, lo que te molestará mucho, por lo que no es la mejor solución a largo plazo. Aunque detiene el sangrado.

Para comprender mejor el problema, puede encontrar estos útiles:

  1. https://github.com/docker/docker/issues/7906
  2. https://github.com/docker/docker/issues/7198

Nueva respuesta:

Esta pregunta parece tener mucho tráfico y ahora hay una mejor solución disponible:fixuid, como su nombre indica, es un ejecutable mágico para cambiar el uid y gid del usuario del contenedor en el inicio del contenedor (usando -u alguien:alguien).

Para obtener una explicación más detallada, consulte:https://boxboat.com/2017/07/25/fixuid-change-docker-container-uid-gid/

Respuesta anterior:

A partir de la versión 1.7 de docker, tiene la opción de montar un directorio de host con permisos para un contenedor usando las banderas :Z o :z así:

docker run -v ./api:/usr/src/app:Z
  • :z:agregará permisos a todos los contenedores usando la etiqueta 'svirt_sandbox_file_t'
  • :Z:agregará permisos solo a la etiqueta del contenedor actual

A partir de docker-compose v1.4.0, puede usarlo en docker compose así:

volumes:
   - ./api:/usr/src/app:Z

Aunque debería agregar que todavía tengo algunos problemas con esto (consulte Agregar permisos al directorio de host con docker-compose).

Referencias:

El uso de volúmenes con Docker puede causar problemas con SELinux - http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/

Guía del usuario de Docker:https://docs.docker.com/engine/userguide/dockervolumes/#volume-labels

Notas de la versión de Docker-compose para v1.4.0:https://github.com/docker/compose/releases/tag/1.4.0


Linux
  1. Cómo crear una imagen personalizada desde un contenedor Docker

  2. Cómo acceder al espacio de nombres de red del contenedor Docker desde el host

  3. ¿Qué hay dentro de una imagen/contenedor de Docker?

  4. Volumen de archivo único montado como directorio en Docker

  5. Docker Volume no monta ningún archivo

¿Actualizar Ubuntu dentro de Docker de 14.04 a 16.04 usando Do-release-upgrade?

Cómo obtener la dirección IP de un contenedor Docker desde el host

Cómo crear una imagen de Docker desde un contenedor en ejecución

lsb_release:comando no encontrado en el último contenedor Docker de Ubuntu

¿Cómo especificar el nombre de host para el contenedor en ejecución?

Sin conectividad de red hacia/desde el contenedor Docker CE en CentOS 8