【问题标题】:Docker can't mount folder on WindowsDocker 无法在 Windows 上挂载文件夹
【发布时间】:2016-05-23 20:17:50
【问题描述】:

我无法在 Windows 上的 Docker 上挂载文件夹。我正在使用存储库https://github.com/LaraDock/laradock。在docker-compose.yml,第23行,有一个文件夹映射:

application:
    build: ./application
    volumes:
        - ../:/var/www/laravel

在 VirtualBox 文件夹中,D:\VM 是共享的。当我启动容器并列出文件时,只有 laradock 文件夹,但我在该文件夹中有一个完整的 Laravel 安装,应该是,但没有列出。

username@pc MINGW64 /d/VM/zemke2/laradock (master)
$ docker-compose up -d  nginx mysql
Starting laradock_application_1
Starting laradock_data_1
Starting laradock_workspace_1
Starting laradock_php-fpm_1
Starting laradock_nginx_1
Starting laradock_mysql_1

username@pc MINGW64 /d/VM/zemke2/laradock (master)
$ docker exec -it laradock_workspace_1 bash
root@c9dbb37ace74:/var/www/laravel# ls
laradock

当我尝试从机器内部安装时,我的权限被拒绝:

root@c9dbb37ace74:/var/www/laravel# mount --bind /d/VM/zemke2/laradock /var/www/laravel
mount: permission denied
root@c9dbb37ace74:/var/www/laravel# sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) VM /var/www/laravel
mount: permission denied
root@c9dbb37ace74:/var/www/laravel#

当我尝试从 Docker 绑定时,它是静默的,但没有挂载文件夹,也没有列出文件。

username@pc MINGW64 /d/VM/zemke2/laradock (master)
$ docker run --privileged=true -it -v '//d/VM/zemke2/laradock:/var/www/laravel' laradock_application bash
root@01dff4894074:/var/www/laravel# ls
logs

这是定义卷映射的容器的调试信息:

username@pc MINGW64 /d/VM/zemke2/laradock (master)
$ docker inspect laradock_application
[
    {
        "Id": "sha256:edc4295d69f048a5ce31bdfb86fbe2132b4a3c070377028efabaed3f82235dfd",
        "RepoTags": [
            "laradock_application:latest"
        ],
        "RepoDigests": [],
        "Parent": "sha256:44f94094c21c3541793d77ae0635bce470a8ee3bc6af4e9d3e902530d373e62b",
        "Comment": "",
        "Created": "2016-05-22T22:30:28.379420591Z",
        "Container": "a990cb7f02784411fce8969a6926ab39dcba1f59ad99f055b77ba8eb9b954c0a",
        "ContainerConfig": {
            "Hostname": "f416997e8b71",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) CMD [\"true\"]"
            ],
            "Image": "sha256:44f94094c21c3541793d77ae0635bce470a8ee3bc6af4e9d3e902530d373e62b",
            "Volumes": null,
            "WorkingDir": "/var/www/laravel",
            "Entrypoint": null,
            "OnBuild": [],
            "Labels": {}
        },
        "DockerVersion": "1.11.1",
        "Author": "Mahmoud Zalt \u003cmahmoud@zalt.me\u003e",
        "Config": {
            "Hostname": "f416997e8b71",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "true"
            ],
            "Image": "sha256:44f94094c21c3541793d77ae0635bce470a8ee3bc6af4e9d3e902530d373e62b",
            "Volumes": null,
            "WorkingDir": "/var/www/laravel",
            "Entrypoint": null,
            "OnBuild": [],
            "Labels": {}
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 125093399,
        "VirtualSize": 125093399,
        "GraphDriver": {
            "Name": "aufs",
            "Data": null
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:6eb35183d3b8bb6aee54874076fb1ad77b5259c93b330986b0cbcaa44cbbbc00",
                "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
                "sha256:60e06fa5d2311255186d98d3cd5709c4f5f08a24a356f468beebb19749acbd10"
            ]
        }
    }
]

【问题讨论】:

  • Docker Toolbox 默认只能挂载你的User文件夹中的文件夹。 stackoverflow.com/questions/33245036/…
  • mount -t vboxsf 命令应该在 virtualbox vm 中运行,而不是在 docker 容器中。
  • 这是一个两步过程。在 Windows 上,Docker 在 Virtualbox VM 中运行。首先,您需要将您的 Windows 文件夹挂载到 Virtualbox;其次,您可以使用卷将 virtualbox 文件夹挂载到 Docker。除了User 文件夹外,Docker 无权访问您的 Windows 文件夹(这是因为 Virtualbox 虚拟机默认将该 Windows 文件夹挂载到虚拟机)
  • 如果将文件夹挂载到 /var,则使用 /var 作为卷。虽然我会建议另一个挂载点,因为 /var 通常包含其他重要的 linux 文件。
  • 我不明白这个问题。但是,如果您将 D:/VM 文件夹安装到虚拟机上的 /d/vm,那么您可以将 docker compose 文件的卷部分更改为 - /d/vm/zemke2/laradock:/var/www/laravel(或其中一个子文件夹。您将知道正确的路径比我好)。

标签: linux docker mount laradock


【解决方案1】:

使用 Docker Toolbox 时,将文件夹挂载到容器是一个两步过程。在 Windows/OS X 上,Docker 在VirtualBox VM 中运行。首先,您需要将 Windows/OS X 文件夹挂载到 VirtualBox。其次,您可以使用卷将 VirtualBox 文件夹挂载到 Docker。 Docker 无权访问您的 Windows/OS X 文件夹,除了 User 文件夹(这是因为 VirtualBox VM 默认将该文件夹挂载到 VM)

如果您在虚拟机上将 D:/VM 文件夹挂载到 /d/vm,那么您可以将 Docker Compose 文件的卷部分更改为 - /d/vm/zemke2/laradock:/var/www/laravel

另请参阅此答案:Docker toolbox: Is there a way to mount other folders than from "C:\Users" Windows?

【讨论】:

  • 还有一件事。每次机器重新启动时,VM 都会丢失 mount 和 /d/vm 文件夹。不知道如何使其永久化?
  • 看看这是否有帮助askubuntu.com/questions/52328/…
【解决方案2】:

对于那些使用 Docker for Windows 的人(Hyper-V):

如果您在使用 Laradock 或任何其他容器时遇到此问题,请确保在 共享驱动器 下选择您的驱动器,并添加有权访问这些驱动器的用户的凭据。当密码包含空格或特殊字符时,有些人也会遇到同样的问题。 还值得注意的是,您应该像这样添加您的用户名: 主机名\用户名

另一个可能的解决方案是暂时禁用防火墙并重新启动 Docker。我认为这是 Docker 无法查看项目文件夹/文件管理器的更常见原因。您需要允许与 docker IP 地址进行通信,或者更好的是,将虚拟网络适配器的策略更改为允许共享文件/打印机的策略(即专用网络 - 这主要取决于您自己的设置)。

有关更多解决方案,您可能需要访问 Docker 论坛。 This thread 尤其包含大量其他可能的解决方案,因为这是 Windows 环境中非常常见的问题。

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 2020-08-30
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多