在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
目录肯定存在于容器中,尝试其他目录不会改变结果。在主机端目录前面加上尾部斜杠也没有帮助。(//c/Users/phisch/dev/htdocs
)
例如,如何将/var/www
挂载到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
}
}
]
原来容器端目录/var/www
需要为空,因为它有一个子目录www
。Docker无法将其用作挂载点。
5条答案
按热度按时间ddrv8njm1#
/
可能被CMD Windows shell解释为一个选项。首先尝试Docker机器ssh默认值,以便在VM中打开ssh会话。从 * 那里 * 再次尝试Docker运行:
docker run -v /c/Users/phisch/dev/htdocs:/var/www phisch:dev
正如thaJeztah在第18290期中所评论的:
您可以考虑使用docker-compose;docker-compose允许您相对于
docker-compose.yml
文件的位置定义绑定装载的卷。使用
docker-compose
文件允许您在单个文件中指定运行容器所需的所有选项,这使得它非常适合在团队成员之间共享(即,只需运行docker-compose up -d
即可使用正确的选项启动项目的所有容器)。此注解提到添加第二个/(& D):
即使在Docker工具箱MSYS shell会话中,也存在问题(如issue 282)
Pyetro注解中的注解:
在Windows中,路径的开头需要一个双斜杠来指示工作目录。
就像这样使用短路径:
经过长时间的讨论,问题是
/var/www
中有一个文件夹。将
/c/Users/phisch/dev/htdoc
挂载到空文件夹确实有效,但可能无法给予预期结果,因为默认CMDapache2-foreground
可能仍基于/var/www
提供其内容(如果将htdocs
挂载到另一个文件夹,则/var/www
将不包含htdocs
内容)。ilmyapht2#
我使用Docker for Windows和PowerShell,并在挂载卷时使用
$PWD
来引用当前目录,这对我来说很好用。yfjy0ee73#
如果我们谈论Windows上的Docker,那么我们必须考虑到所有容器都在VirtualBox上运行的事实。
在将卷安装到容器之前,我们必须确保特定的文件夹可用于VirtualBox。
首先,要定义当前运行的Docker机器的名称,请运行
其次,添加共享文件夹到VirtualBox:
第三步,创建文件夹
第四,安装:
最后,创建一个容器:
fquxozlt4#
首先,确保您以管理员身份从powershell运行。
接下来,运行如下命令:
测试在Windows 11上运行。
fd3cxomn5#
旧的
-v
语法仍然有效,但现在the recommended way将使用--mount
,例如