当前位置: 首页 > 面试题库 >

使用Windows主机时如何挂载Docker卷?

宗政招
2023-03-14
问题内容

在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无法将其用作挂载点。


问题答案:

/CMD Windows shell 可能会将其解释为选项。

首先尝试使用docker-machine 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使用正确的选项启动项目的所有容器)。

此评论提到了第二个/:

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

即使在docker toolbox msys
shell会话中,也存在问题(例如问题282)

经过长时间的讨论,问题在于其中/var/www有一个文件夹。

挂载 /c/Users/phisch/dev/htdoc到空文件夹确实可以,但是可能无法获得预期的结果,因为默认CMD
apache2-foreground可能仍根据其内容提供内容/var/wwwhtdocs如果将htdocs其安装到另一个文件夹中则不会包含任何内容)。



 类似资料:
  • 问题内容: 我刚刚检查了/ var / lib / docker / volumes文件夹,发现该文件夹正以名为Docker UUID的文件夹爆炸,每个文件夹都包含一个config.json文件,其内容与 哪里 是指向主机上的文件夹的路径,该主机已通过-v开关挂载到Docker容器上。我有这样的文件夹可以追溯到我对Docker进行实验的开始,即大约3周前。 有问题的容器很久以前就已停止并且dock

  • 问题内容: 我有一个正在进行dockerizing的开发环境,并且我希望能够实时重新加载所做的更改而不必重建docker映像。我使用docker compose是因为redis是我应用程序的依赖项之一,我喜欢能够链接redis容器 我在我的中定义了两个容器: 我已经到了我应用程序的dockerfile中添加卷的地步,但是如何将主机的目录挂载到卷中,以便对代码的所有实时编辑都可以反映在容器中? 这是

  • 问题内容: 我对Docker中的整个数据量过程有疑问。基本上,这里有两个Dockerfile及其各自的运行命令: Dockerfile 1- 命令1- Dockerfile 2- 命令2- 因此,奇怪的是第一个dockerfile和命令按预期工作。docker守护程序将目录从容器装载到主机的位置。因此,我可以根据需要编辑配置文件,它们将在重新启动后保留在容器中。 但是,对于第二个dockerfil

  • 问题内容: 在Docker容器中挂载主机目录非常容易。 但是我需要另一种方式。 我使用Docker容器作为开发环境来开发WordPress插件。该Docker容器包含运行WordPress所需的一切(MySQL,Apache,PHP和WordPress)。我从Docker容器中的主机挂载了我的插件src文件夹,以便可以在开发期间测试我的插件。 对于调试,如果我在主机上运行的IDE具有对Docker

  • 假设我有一个应用程序具有这个简单的DockerFile: 然后我运行了一个容器: 所以它工作正常,并将一些日志存储在docker容器的中。 我也看到docker-mount目录从容器到主机,但它并没有解决我的问题我需要一种方法备份我的文件从Docker到主机。

  • 我想在Windows10上运行一个容器,并将我的本地文件夹挂载到容器中的一个文件夹中。让我们以下面的命令为例,但任何容器都可以。