Docker no puede escribir en el directory montado utilizando -v a less que tenga 777 permissions

Estoy usando la image docker-solr con la window acoplable, y necesito montar un directory dentro de ella que logre usando la bandera -v .

El problema es que el contenedor necesita escribir en el directory que he montado en él, pero no parece tener los permissions para hacerlo, a less que haga chmod 777 en todo el directory. No creo que el permiso para permitir que todos los usuarios lean y escriban es la solución, sino solo una solución temporal.

¿Alguien puede guiarme para encontrar una solución más canónica?

Editar: He estado ejecutando docker sin sudo porque me agregué al grupo de Docker. Acabo de descubrir que el problema se resuelve si ejecuto docker con sudo , pero tengo curiosidad por si hay otras soluciones.

Más recientemente, después de consultar algunos repositorys de portadores oficiales, me di count de que la forma más idiomática de resolver estos problemas de permissions es usar algo llamado gosu en set con un script de punto de input. Por ejemplo, si tomamos un proyecto de acoplador existente, por ejemplo solr, el mismo con el que tuve problemas anteriormente.

El file docker en Github construye de manera muy efectiva todo el proyecto, pero no hace nada para dar count de los problemas de permissions.

Entonces, para superar esto, primero agregué la configuration de gosu al file docker (si implementa este aviso, la versión 1.4 está codificada. Puede consultar las últimas versiones aquí ).

 # grab gosu for easy step-down from root RUN mkdir -p /home/solr \ && gpg --keyserver pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ && curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/1.4/gosu-$(dpkg --print-architecture)" \ && curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.4/gosu-$(dpkg --print-architecture).asc" \ && gpg --verify /usr/local/bin/gosu.asc \ && rm /usr/local/bin/gosu.asc \ && chmod +x /usr/local/bin/gosu 

Ahora podemos usar gosu, que es básicamente el mismo que su o sudo , pero funciona mucho mejor con docker. De la descripción para gosu:

Esta es una herramienta simple que surge del simple hecho de que su y sudo tienen un TTY muy extraño y, a menudo molesto, y un comportamiento de reenvío de señal.

Ahora los otros cambios que hice en el file docker fueron estos agregando estas líneas:

 COPY solr_entrypoint.sh /sbin/entrypoint.sh RUN chmod 755 /sbin/entrypoint.sh ENTRYPOINT ["/sbin/entrypoint.sh"] 

solo para agregar mi file de punto de input al contenedor de la window acoplable.

y eliminando la línea:

 USER $SOLR_USER 

Entonces, de manera pnetworkingeterminada, usted es el usuario raíz. (Por eso tenemos gosu para bajar de la raíz).

Ahora, en cuanto a mi propio file de punto de input, no creo que esté escrito a la perfección, pero cumplió con su cometido.

 #!/bin/bash set -e export PS1="\w:\u docker-solr-> " # step down from root when just running the default start command case "$1" in start) chown -R solr /opt/solr/server/solr exec gosu solr /opt/solr/bin/solr -f ;; *) exec $@ ;; esac 

Un command de ejecución del acoplador toma la forma:

 docker run <flags> <image-name> <passed in arguments> 

Básicamente, el punto de input dice que si quiero ejecutar solr como de costumbre, paso el argumento de start al final del command de esta manera:

 docker run <flags> <image-name> start 

y ejecute los commands que pasa como root.

La opción de start primero le da a los usuarios la propiedad de los directorys y luego ejecuta el command pnetworkingeterminado. Esto resuelve el problema de propiedad porque, a diferencia de la configuration de dockerfile, que es algo único, el punto de input se ejecuta cada vez.

Entonces, si assembly directorys usando el indicador -d, antes de que el punto de input realmente ejecute solr, se seleccionarán los files dentro del contenedor del acoplador por usted.

En cuanto a lo que esto hace a sus files fuera del contenedor, he tenido resultados mixtos porque Docker actúa un poco raro en OSX. Para mí, no cambié los files fuera del contenedor, pero en otro sistema operativo donde Docker juega mejor con el sistema de files, podría cambiar tus files afuera, pero supongo que eso es lo que tendrás que tratar si quieres para montar files dentro del contenedor en lugar de simplemente copyrlos en.