GNU/Linux >> Tutoriales Linux >  >> Linux

Volumen de archivo único montado como directorio en Docker

test es el nombre de su imagen que ha construido con 'docker build -t test ', no un /test carpeta.

Prueba con un Dockerfile con:

CMD ["ls", "-lah", "/"]
or
CMD ["cat", "/file.json"]

Y:

docker run --rm -it -v $(pwd)/file.json:/file.json test

Tenga en cuenta el uso de $(pwd) para montar un archivo con su ruta absoluta completa (no se admiten rutas relativas)

Usando $(pwd) , obtendrá una ruta absoluta que existe y respetará las mayúsculas y minúsculas, a diferencia de un nombre de archivo o ruta que podría no existir.
Una ruta de host inexistente se montaría como una carpeta en el contenedor.


Tal vez eso esté claro en las respuestas anteriores ... pero me tomó un tiempo descubrirlo en mi caso.

La razón subyacente por la que el archivo que se comparte con -v aparece como un directorio en lugar de un archivo es que Docker no pudo encontrar el archivo en el host. Entonces, Docker crea un nuevo directorio en el contenedor con el nombre del archivo no existente en el host, ya que Docker cree que el usuario solo quiere compartir un volumen/directorio que se creará en el futuro.

Entonces, en el problema informado anteriormente, si usó un directorio relativo en el comando -v y la ventana acoplable no comprende los directorios relativos, eso significa que el archivo no se encontró en el host y, por lo tanto, la ventana acoplable creó un directorio. Y la respuesta anterior que sugiere usar $(pwd) será la solución correcta cuando el problema se deba a un directorio relativo.

Pero para aquellos que leen esta página que no usan un directorio relativo y tienen el mismo problema... intente entender por qué falta el archivo en el host.

Podría ser un error tipográfico estúpido...

Podría ser que esté ejecutando el comando "docker run" desde un cliente que genera el contenedor docker en un host diferente y el archivo que se comparte no existe en ese host diferente. El archivo que se comparte con -v debe existir en el host donde el agente acoplable generará el contenedor... no necesariamente en el cliente donde se ejecuta el comando "docker run -v..." (aunque serán los mismos en muchos casos).

Hay otras explicaciones posibles arriba para Mac y Windows... esa también podría ser.

Entonces, el archivo que falta en el host es el problema... resuelva el problema en su configuración... usar $(pwd) podría ser la solución, pero no siempre.


Linux
  1. Tar:¿Extraer un solo archivo a un directorio sin crear subcarpetas?

  2. Actualización de un solo archivo en un tar comprimido

  3. ¿Cómo RSYNC un solo archivo?

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

  5. sys/types.h:No existe tal archivo o directorio

Abrir un archivo .tar.gz con un solo comando

Obtenga el archivo más reciente en un directorio en Linux

Explorando el sistema de archivos del contenedor Docker

Docker en Docker no puede montar el volumen

Bash:¿No existe tal archivo o directorio?

Reanudar la transferencia de un solo archivo por rsync