Montaje del directorio desde el sistema padre al contenedor en Docker


¿Cómo puedo montar un directorio desde el sistema padre a un contenedor en Docker?

Author: Peter Mortensen, 2013-03-29

5 answers

*Actualización-ver respuesta a continuación. esta ya no es la respuesta correcta *

No se pueden montar, por diseño, porque Docker ya no podía garantizar un entorno de ejecución repetible.

Sin embargo usted puede:

  1. Importe el sistema de archivos raíz del host y cree una nueva imagen a partir de él:

    tar -C / -c . | docker import - entend/custombase
    
  2. Importe un sistema de archivos raíz de bootstrap, por ejemplo, el resultado de ejecutar 'debootstrap'. (Tenga en cuenta que así es como la imagen oficial "base" fue creado, por lo que podría ser mejor simplemente ejecutando 'docker pull base')

    debootstrap precise ./bootstrap
    tar -C ./bootstrap -c . | docker import - entend/ubuntubase
    
  3. Inyecte el contenido de un directorio local en un contenedor al ejecutarlo.

    IMAGE=base; SRC=./stuff; DST=/tmp/stuff; CMD="echo hello world"; tar -C $src -c . | docker run $IMAGE -i /bin/sh -c "tar -C $DST -x; $CMD"
    

    Esto ejecutará un contenedor desde IMAGE IMAGE, copiará el directorio host into SRC en el directorio contenedor directory DST, luego ejecutará el comando command CMD.

    Este último ejemplo se usa típicamente para insertar código fuente antes de ejecutar un comando de compilación dentro del contenedor.

 11
Author: Solomon Hykes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-31 21:17:22

Al igual que una actualización final, esta característica ahora se libera en Docker (aunque la API ha cambiado desde la solicitud de extracción vinculada por @imiric).

Simplemente use un comando como

docker run -v /tmp:/root myImage

Para montar /tmp desde la máquina host como /root dentro de la imagen.

Fuente: https://docs.docker.com/engine/userguide/dockervolumes/

 157
Author: user2089674,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-15 17:34:55

Solo para actualizar esta pregunta, esto pronto será posible en Docker.

Esta pull request ha implementado esta característica y pronto se fusionará con master.

Puede usarlo ahora mismo si instala esta bifurcación.

 5
Author: imiric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-24 20:34:53

Esto ES posible en Docker:

Monte los datos en el contenedor de la aplicación:

docker run -t -i -rm -volumes-from DATA -name client1 ubuntu bash
 4
Author: Joost van der Laan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-31 21:18:45

Truco para OS X y Windows

Dos montajes sucesivos: Supongo que muchos posts aquí podrían estar usando dos boot2docker. La razón por la que no ves nada es porque estás montando un directorio desde boot2docker, no desde tu host. Básicamente necesitas dos montajes sucesivos: el primero para montar un directorio desde tu host a tu sistema y el segundo para montar el nuevo directorio desde boot2docker a tu contenedor de la siguiente manera:

  1. Montar el sistema local en boot2docker:

    sudo mount -t vboxsf hostfolder /boot2dockerfolder
    
  2. Montar el archivo boot2docker en un contenedor Linux

    docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
    

Luego, cuando haga ls dentro de la carpeta de contenedores, verá el contenido de su hostfolder

 4
Author: louisd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-31 21:21:06