¿Cómo usar la opción volume volume con Docker Toolbox en Windows?


¿Cómo puedo compartir una carpeta entre mis archivos de Windows y un contenedor docker, montando un volumen con un simple comando --volume usando Docker Toolbox on?

Estoy usando "Docker Quickstart Terminal" y cuando intento esto:

winpty docker run -it --rm --volume /C/Users/myuser:/myuser ubuntu

Tengo este error:

Invalid value "C:\\Users\\myuser\\:\\myuser" for flag --volume: bad mount mode specified : \myuser
See 'docker run --help'.

Siguiendo esto , también intenté

winpty docker run -it --rm --volume "//C/Users/myuser:/myuser" ubuntu

Y consiguió

Invalid value "\\\\C:\\Users\\myuser\\:\\myuser" for flag --volume: \myuser is not an absolute path
See 'docker run --help'.
Author: Community, 2015-10-14

7 answers

Esto es una mejora de la respuesta seleccionada porque esa respuesta se limita a c:\Users carpeta. Si desea crear un volumen utilizando un directorio fuera de c:\Users esto es una extensión.

En Windows 7, utilicé docker toolbox. Se utiliza Caja Virtual.

  1. Abrir caja virtual
  2. Seleccione la máquina (en mi caso por defecto).
  3. Haga clic con el botón derecho y seleccione la opción configuración
  4. Ir a Carpetas compartidas
  5. Incluya una nueva carpeta de máquina.

Por ejemplo, en mi caso he incluido:

**Name**: c:\dev
**Path**: c/dev
  1. Haga clic y cierre
  2. Abra "Docker Quickstart Terminal" y reinicie la máquina docker.

Use este comando:

$ docker-machine restart

Para verificar que funcionó, siguiendo estos pasos:

  1. SSH a la máquina acoplable.

Usando este comando:

$ docker-machine ssh
  1. Vaya a la carpeta que ha compartido/montado.

En mi caso, uso esto command

$ cd /c/dev
  1. Compruebe el propietario del usuario de la carpeta. Puede usar "ls-all "y verificar que el propietario será"docker"

Verás algo como esto:

docker@default:/c/dev$ ls -all
total 92
drwxrwxrwx    1 docker   staff         4096 Feb 23 14:16 ./
drwxr-xr-x    4 root     root            80 Feb 24 09:01 ../
drwxrwxrwx    1 docker   staff         4096 Jan 16 09:28 my_folder/

En ese caso, podrá crear un volumen para esa carpeta.

Puedes usar estos comandos:

docker create -v /c/dev/:/app/dev --name dev image
docker run -d -it --volumes-from dev image

O

docker run -d -it -v /c/dev/:/app/dev image

Ambos comandos funcionan para mí. Espero que esto sea útil.

 31
Author: jmgoyesc,
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
2017-02-24 09:30:41

Esto es en realidad un problema del proyecto y hay 2 soluciones de trabajo:

  1. Creando un volumen de datos:

    docker create -v //c/Users/myuser:/myuser --name data hello-world
    winpty docker run -it --rm --volumes-from data ubuntu
    
  2. SSHing directamente en el host acoplable:

    docker-machine ssh default
    

    Y a partir de ahí haciendo un clásico:

    docker run -it --rm --volume /c/Users/myuser:/myuser ubuntu
    
 25
Author: Anthony O.,
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-10-15 14:38:51

A partir de agosto de 2016 Docker para Windows ahora usa hyper-v directamente en lugar de virtualbox, así que creo que es un poco diferente. Primero comparta la unidad en configuración y luego use el formato de letra de unidad C:, pero use barras oblicuas. Por ejemplo, creé un directorio H:\t\REDIS y pude verlo montado en /data en el contenedor con este comando:

docker run -it --rm -v h:/t/REDIS:/data redis sh

El mismo formato, usando letra de unidad y dos puntos y luego barras inclinadas hacia adelante para el separador de ruta funcionó tanto desde el símbolo del sistema de Windows y de Git Bash.

Encontré esta pregunta en Google para encontrar una respuesta, pero no pude encontrar nada que funcionara. Las cosas parecen funcionar sin errores, pero simplemente no podía ver los datos en el host (o viceversa). Finalmente revisé la configuración de cerca y probé el formato que muestran:

introduzca la descripción de la imagen aquí

Así que primero, debe compartir toda la unidad con la vm de docker en configuración aquí, creo que eso le da a la vm' docker-machine ' que se ejecuta en hyper-v acceso a esa unidad. Entonces tienes que usar el formato que se muestra allí, que parece existir solo en esta imagen y en ninguna documentación o preguntas que pude encontrar en la web:

docker run --rm -v c:/Users:/data alpine ls /data
 5
Author: Jason Goemaat,
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
2016-08-27 13:41:36

Prueba esto:

  1. Abre la terminal de inicio rápido de Docker. Si ya está abierto, ejecute $ cd ~ para asegurarse de que está en el directorio de usuario de Windows.
  2. $ docker run -it -v /$(pwd)/ubuntu:/windows ubuntu

Funcionará si el error se debe a un error tipográfico. Obtendrá una carpeta vacía llamada ubuntu en su directorio de usuario. Verá esta carpeta con el nombre windows en su contenedor ubuntu.

 2
Author: Thoran,
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
2016-04-22 12:47:07

Para aquellos que usan Caja virtual que prefieren línea de comandos enfoque

1) Asegúrese de que la docker-machine no esté ejecutando

Terminal de inicio rápido de Docker:

docker-machine stop

2) Crear el compartimiento de Windows docker-machine

Símbolo del sistema de Windows:
(Modifique lo siguiente para que se ajuste a su escenario. Alimento mi contenedor Apache httpd desde el directorio sincronizado a través de Dropbox.)

set VBOX=D:\Program Files\Oracle\VirtualBox\VBoxManage.exe
set VM_NAME=default
set NAME=c/htdocs
set HOSTPATH=%DROPBOX%\htdocs
"%VBOX%" sharedfolder add "%VM_NAME%" --name "%NAME%" --hostpath "%HOSTPATH%" --automount

3) Inicie la docker-machine y monte el volumen en un nuevo contenedor

Terminal de inicio rápido de Docker:
(De nuevo, estoy iniciando un contenedor httpd de Apache, de ahí que exponga ese puerto.)

docker-machine start
docker run -d --name my-apache-container-0 -p 80:80 -v /c/htdocs:/usr/local/apache2/htdocs my-apache-image:1.0
 2
Author: Jaroslav Záruba,
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
2017-06-19 19:48:00

Si está buscando la solución que resolverá todos los problemas de Windows y hará que funcione en el sistema operativo Windows de la misma manera que en Linux, consulte a continuación. He probado esto y funciona en todos los casos. También estoy mostrando cómo lo consigo (los pasos y el proceso de pensamiento).

Solución 1: Use VirtualBox (si cree que no es buena idea, consulte la Solución 2 a continuación)

  • Abra VirtualBox (ya lo tiene instalado junto con las herramientas docker)
  • Crear máquina virtual con segunda tarjeta ethernet-bridged, de esta manera recibirá la dirección IP de su red (tendrá IP como docker machine)
  • Instalar Ubuntu LTS que es anterior a 1 año
  • Instalar docker
  • Agregue directorios compartidos a la máquina virtual y monte automáticamente los directorios de su proyecto (de esta manera tiene acceso al directorio del proyecto desde Ubuntu) pero aún puede funcionar en Windows
  • Hecho

Bono:

  • Todo está funcionando de la misma manera que en Linux
  • Pausa / Desactiva el entorno acoplado cuando quieras

Solución 2: Use VirtualBox (esto es muy similar a la solución 1, pero también muestra el proceso de pensamiento, que podría ser útil para resolver problemas similares)

  • Lee que alguien mueve las carpetas a/C / Users / Public y eso funciona https://forums.docker.com/t/sharing-a-volume-on-windows-with-docker-toolbox/4953/2
  • Pruébalo, date cuenta de que no tiene mucho sentido en tu caso.
  • Lea toda la página aquí https://github.com/docker/toolbox/issues/607 y probar todas las soluciones que figuran en la página
  • Encuentre esta página (la que está leyendo ahora) y pruebe todas las soluciones de otros comentarios
  • Encontrar en algún lugar información que establecer COMPOSE_CONVERT_WINDOWS_PATHS=1 variable de entorno podría resolver el problema.
  • Deje de buscar la solución durante unos meses
  • Volver y comprobar los mismos enlaces de nuevo
  • Llorar profundamente
  • Siente el momento de la iluminación
  • Abra VirtualBox (ya lo tiene instalado junto con las herramientas docker)
  • Cree una máquina virtual con un segundo puente de tarjeta ethernet, de esta manera recibirá la dirección IP de su red (tendrá IP como la máquina acoplable)
  • Instalar Ubuntu LTS que es muy reciente (no más de unos meses)
  • Observe que el montaje automático no funciona realmente y la integración está rota (como el uso compartido del portapapeles sucesivamente.)
  • Eliminar máquina virtual
  • Sal y toma algo
  • Alquilar un coche caro e ir con alta velocidad en la carretera
  • Destruir el coche y morir
  • Reaparecer frente a su PC
  • Instalar Ubuntu LTS que es anterior a 1 año
  • Intenta ejecutar docker
  • Observe que no está instalado
  • Install docker by apt-get install docker
  • Instalación sugerida docker.io
  • Intente ejecutar docker-compose
  • Note que no es instalado
  • apt get install docker-compose
  • Intente ejecutar su proyecto con docker-compose
  • Observe que es la versión antigua
  • Compruebe su nivel de potencia (debe ser superior a 9000)
  • Buscar cómo instalar la última versión de docker y encontrar la guía oficial https://docs.docker.com/install/linux/docker-ce/ubuntu /
  • Desinstalar el docker actual-compose y docker.io
  • Instalar docker usando la guía oficial https://docs.docker.com/install/linux/docker-ce/ubuntu /
  • Agregue directorios compartidos a la máquina virtual y monte automáticamente los directorios de su proyecto (de esta manera tiene acceso al directorio del proyecto desde Ubuntu, por lo que puede ejecutar cualquier comando docker)
  • Hecho
 1
Author: Grzegorz Gajos,
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-06-01 13:18:59

Lo resuelto!

Añadir un volumen:

Docker run-d-v my-named-volume: C:\MyNamedVolume testimage: latest

Montar un directorio host:

Docker run-d-v C:\Temp\123:C:\My\Shared\Dir testimonio: latest

 -1
Author: Hugo Kokay,
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
2017-10-02 17:06:32