2016-02-10 148 views
4

在Windows主机下安装Docker卷对我来说是一个巨大的痛苦,我无法让它工作。如何在使用Windows主机时安装Docker卷?

目前我得到了以下简单Dockerfile:

FROM php:5-apache 
RUN apt-get update 

,当我从它建立一个图像,并开始一个容器

docker build -t phisch:dev . 
docker run phisch:dev 

容器正常启动。

但是,当我试图装入卷:

docker run -v /c/Users/phisch/dev/htdocs:/var/www phisch:dev 

会显示以下信息:

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.. 

/var/www目录中的容器definetely存在,尝试其他directorys没有变化结果。在主机端目录前加一个斜杠也没有帮助。 (//c/Users/phisch/dev/htdocs

如何安装例如/var/wwwC:/Users/phisch/dev/htdocs

[email protected] 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 
     } 
    } 
] 

原来,/var/www需要容器侧目录是空的,因为它有一个子目录www,码头工人无法使用它作为一个安装点。

回答

4

这是可能的/被解释为通过CMD Windows外壳程序的选项。

首先尝试泊坞窗机SSH默认情况下,要想在你的虚拟机打开一个SSH会话。从再试泊坞窗运行:docker run -v /c/Users/phisch/dev/htdocs:/var/www phisch:dev

正如thaJeztahissue 18290评论:

你可以考虑使用docker-compose; docker-compose允许您定义相对于docker-compose.yml文件位置的绑定安装卷。
使用docker-compose文件允许你指定在一个单独的文件,这使得它非常适合团队成员(即,只需运行docker-compose up -d将启动所有容器与右侧的选项项目)之间共享运行容器所需的所有选项。

This comment提到了& dding第二/:

docker run -v //c/Users/phisch/dev/htdocs:`/var/www` phisch:dev 

即使在泊坞窗工具箱MSYS shell会话,有问题(如issue 282


长时间的讨论后,问题是/var/www中有一个文件夹。

安装/c/Users/phisch/dev/htdoc到一个空文件夹的工作,但可能不会产生预期的结果,因为默认的CMD apache2-foreground仍可能成为其内容的基础上/var/www(如果htdocs安装到另一个文件夹这不会有htdocs内容) 。

+0

运行'搬运工运行-v/C /用户/ phisch的/ dev/htdocs中:/无功/网络phisch:从搬运工机(SSH会话)内dev',我接收到相同的错误消息像以前一样。 –

+0

@PhilippSchaffrath似乎有两个*错误:'找不到或不存在的容器命令'涉及'CMD'或'ENTRYPOINT'。如果该命令引用了应该挂载的文件,那么我们需要解析第一个文件。是否存在'c:\ Users \ phisch \ dev \ htdocs'?有了这个确切的案例? – VonC

+0

是的这个目录存在与确切的案件。这两条消息总是聚集在一起。一切正常(不使用音量时)或两种消息均被打印。 –

3

如果我们在讨论窗口上的docker,那么我们必须考虑到所有容器都在Virtual Box(VB)上运行的事实。在将音量安装到容器之前,我们必须确保该特定文件夹可用于VB。

首先,定义当前运行搬运工机的名称,运行

$ docker-machine.exe active 
default 

其次,添加共享文件夹到VB

$ VBoxManage sharedfolder add default --name "some_project" --hostpath D:\Projects\some_project 

第三,创建文件夹

$ docker-machine.exe ssh default 'sudo mkdir --parents /d/projects/some_project' 

第四,安装它

$ docker-machine.exe ssh default 'sudo mount -t vboxsf some_project /d/projects/some_project' 

最后,创建容器

$ docker run -v //d/projects/some_project://d/projects/some_project -d some-image_name 
+0

你救了我的一天!谢谢! –

1

我使用泊坞的Windows使用PowerShell和使用$PWD安装卷时,参考当前目录,它很适合我。几个例子:

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