windows - run - docker share folder with host
¿Cómo montar un volumen de docker mientras se usa un host de Windows? (3)
Es posible que /
sea interpretado como una opción por el shell de Windows de CMD.
Pruebe primero una máquina Docker-machine ssh por defecto, para abrir una sesión ssh en su máquina virtual. A partir de ahí, intente ejecutar de nuevo la docker run -v /c/Users/phisch/dev/htdocs:/var/www phisch:dev
: docker run -v /c/Users/phisch/dev/htdocs:/var/www phisch:dev
Como lo comentó thaJeztah en el número 18290 :
Podría considerar usar docker-componte ; docker-compose le permite definir volúmenes montados en enlace en relación con la ubicación del archivo
docker-compose.yml
.
El uso de un archivodocker-compose
permite especificar todas las opciones necesarias para ejecutar sus contenedores en un solo archivo, lo que lo hace ideal para compartir entre los miembros del equipo (es decir, solo ejecutedocker-compose up -d
iniciará todos los contenedores para el proyecto con las opciones correctas).
Este comentario menciona a & dding a second /:
docker run -v //c/Users/phisch/dev/htdocs:`/var/www` phisch:dev
Incluso en la sesión del shell msys toolbox msys, hay problemas (como el problema 282 )
Después de una larga discusión, el problema era que /var/www
tenía una carpeta.
El montaje /c/Users/phisch/dev/htdoc
en una carpeta vacía funciona, pero podría no dar el resultado esperado, ya que el CMD apache2-foreground
predeterminado todavía podría servir su contenido basado en /var/www
(que no tendría htdocs
contenido si ese htdocs
está montado en otra carpeta).
Montar el volumen de un docker mientras estaba bajo un host de Windows, ha sido un gran dolor para mí, y no pude lograr que funcionara.
Actualmente tengo el siguiente archivo Docker simple:
FROM php:5-apache
RUN apt-get update
Cuando construyo una imagen de ella, y comienzo un contenedor
docker build -t phisch:dev .
docker run phisch:dev
el contenedor comienza correctamente
Pero cuando intento montar un volumen:
docker run -v /c/Users/phisch/dev/htdocs:/var/www phisch:dev
se mostrará el siguiente mensaje:
C:/Users/phisch/dev>docker run -v /c/Users/phisch/dev/htdocs:/var/www phisch:dev
no such file or directory
docker: Error response from daemon: Container command not found or does not exist..
El directorio /var/www
definitivamente existe en el contenedor, intentar otros directores no cambia el resultado. El anteponer una barra inclinada al directorio del lado del servidor tampoco ayuda. ( //c/Users/phisch/dev/htdocs
)
Cómo montar, por ejemplo /var/www
a C:/Users/phisch/dev/htdocs
?
phisch@DESKTOP-UC1LB9J MINGW64 ~/dev (master)
$ docker inspect phisch:dev
[
{
"Id": "sha256:73c1533222a905a378f12505ccbd9e9b34cde5a4b34ed008c39e23d5d58a9c91",
"RepoTags": [
"dev_web:latest",
"phisch:dev",
"phisch:dev3"
],
"RepoDigests": [],
"Parent": "sha256:d2c4149d86c4dfceaff0e9c4eb5a5d42ca7815f81dd08baad4dc8bda6db2fb10",
"Comment": "",
"Created": "2016-02-10T12:16:37.667236134Z",
"Container": "dad811f51ef3b94d9845d13a0e43ad07ccd5684ea2747b3846accdc71abeb628",
"ContainerConfig": {
"Hostname": "e06f5a03fe1f",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"PHP_INI_DIR=/usr/local/etc/php",
"PHP_EXTRA_BUILD_DEPS=apache2-dev",
"PHP_EXTRA_CONFIGURE_ARGS=--with-apxs2",
"GPG_KEYS=0BD78B5F97500D450838F95DFE857D9A90D90EC1 6E4F6AB321FDC07F2C332E3AC2BF0BC433CFC8B3",
"PHP_VERSION=5.6.18",
"PHP_FILENAME=php-5.6.18.tar.xz",
"PHP_SHA256=54dd9106c3469bc7028644d72ac140af00655420bbaaf4a742a64e9ed02ec1b0"
],
"Cmd": [
"/bin/sh",
"-c",
"apt-get update"
],
"ArgsEscaped": true,
"Image": "sha256:d2c4149d86c4dfceaff0e9c4eb5a5d42ca7815f81dd08baad4dc8bda6db2fb10",
"Volumes": null,
"WorkingDir": "/var/www/html",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"DockerVersion": "1.10.0",
"Author": "",
"Config": {
"Hostname": "e06f5a03fe1f",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"PHP_INI_DIR=/usr/local/etc/php",
"PHP_EXTRA_BUILD_DEPS=apache2-dev",
"PHP_EXTRA_CONFIGURE_ARGS=--with-apxs2",
"GPG_KEYS=0BD78B5F97500D450838F95DFE857D9A90D90EC1 6E4F6AB321FDC07F2C332E3AC2BF0BC433CFC8B3",
"PHP_VERSION=5.6.18",
"PHP_FILENAME=php-5.6.18.tar.xz",
"PHP_SHA256=54dd9106c3469bc7028644d72ac140af00655420bbaaf4a742a64e9ed02ec1b0"
],
"Cmd": [
"apache2-foreground"
],
"ArgsEscaped": true,
"Image": "sha256:d2c4149d86c4dfceaff0e9c4eb5a5d42ca7815f81dd08baad4dc8bda6db2fb10",
"Volumes": null,
"WorkingDir": "/var/www/html",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 491287784,
"VirtualSize": 491287784,
"GraphDriver": {
"Name": "aufs",
"Data": null
}
}
]
Resulta que el directorio /var/www
del contenedor necesita estar vacío, ya que tenía un subdirectorio www
, Docker no pudo usarlo como punto de montaje.
si hablamos de Docker en Windows, debemos tener en cuenta el hecho de que todos los contenedores se ejecutan en Virtual Box (VB). Antes de montar el volumen en un contenedor, debemos asegurarnos de que esa carpeta esté disponible para VB.
En primer lugar, defina el nombre de la máquina acopladora actual en ejecución, ejecute
$ docker-machine.exe active
default
En segundo lugar, agregue la carpeta compartida a VB
$ VBoxManage sharedfolder add default --name "some_project" --hostpath D:/Projects/some_project
En tercer lugar, crea una carpeta
$ docker-machine.exe ssh default ''sudo mkdir --parents /d/projects/some_project''
En cuarto lugar, móntelo
$ docker-machine.exe ssh default ''sudo mount -t vboxsf some_project /d/projects/some_project''
Por último, crear contenedor
$ docker run -v //d/projects/some_project://d/projects/some_project -d some-image_name
Utilizo Docker para Windows con powershell y uso $PWD
para referirme al directorio actual cuando monté un volumen y me funciona bien. Un par de ejemplos:
docker run -p 2368:2368 -v $PWD/ghost:/var/lib/ghost -d ghost
docker run -p 2368:2368 -v $PWD/:/var/lib/ghost -d ghost