Docker 无法在 Windows 上装载文件夹
Docker can't mount folder on Windows
我无法在 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 工具箱时,将文件夹装载到容器是一个两步过程。在 Windows/OS X 上,Docker 在 VirtualBox VM 中运行。首先,您需要将 Windows/OS X 文件夹挂载到 VirtualBox。其次,您可以使用卷将 VirtualBox 文件夹挂载到 Docker。 Docker 无法访问您的 Windows/OS X 文件夹,但用户文件夹除外(这是因为 VirtualBox VM 默认将该文件夹安装到 VM)
如果您将 D:/VM
文件夹安装到虚拟机上的 /d/vm
,那么您可以将 Docker Compose 文件的卷部分更改为 - /d/vm/zemke2/laradock:/var/www/laravel
另请参阅此答案:
对于 Windows(在 Hyper-V 上)使用 Docker 的用户:
如果您在使用 Laradock 或任何其他容器时遇到此问题,请确保 select 您的驱动器位于 Shared Drives 下,并添加用户凭据访问这些相同的驱动器。有些人在密码包含空格或特殊字符时也遇到过同样的问题。
还值得注意的是,您应该像这样添加您的用户名:
hostip\username
另一种可能的解决方案是暂时禁用防火墙并重新启动 Docker。我认为这是 Docker 无法查看项目 folders/filers 的一个更常见的原因。您需要允许通信 to/from docker IP 地址,或者更好的是,将虚拟网络适配器的策略更改为允许共享 files/printers 的策略(即专用网络 - 这主要是取决于你自己的设置)。
如需更多解决方案,您可能需要访问 Docker 论坛。 This thread 特别包含大量其他可能的解决方案,因为这是 Windows 环境中非常常见的问题。
我无法在 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 工具箱时,将文件夹装载到容器是一个两步过程。在 Windows/OS X 上,Docker 在 VirtualBox VM 中运行。首先,您需要将 Windows/OS X 文件夹挂载到 VirtualBox。其次,您可以使用卷将 VirtualBox 文件夹挂载到 Docker。 Docker 无法访问您的 Windows/OS X 文件夹,但用户文件夹除外(这是因为 VirtualBox VM 默认将该文件夹安装到 VM)
如果您将 D:/VM
文件夹安装到虚拟机上的 /d/vm
,那么您可以将 Docker Compose 文件的卷部分更改为 - /d/vm/zemke2/laradock:/var/www/laravel
另请参阅此答案:
对于 Windows(在 Hyper-V 上)使用 Docker 的用户:
如果您在使用 Laradock 或任何其他容器时遇到此问题,请确保 select 您的驱动器位于 Shared Drives 下,并添加用户凭据访问这些相同的驱动器。有些人在密码包含空格或特殊字符时也遇到过同样的问题。 还值得注意的是,您应该像这样添加您的用户名: hostip\username
另一种可能的解决方案是暂时禁用防火墙并重新启动 Docker。我认为这是 Docker 无法查看项目 folders/filers 的一个更常见的原因。您需要允许通信 to/from docker IP 地址,或者更好的是,将虚拟网络适配器的策略更改为允许共享 files/printers 的策略(即专用网络 - 这主要是取决于你自己的设置)。
如需更多解决方案,您可能需要访问 Docker 论坛。 This thread 特别包含大量其他可能的解决方案,因为这是 Windows 环境中非常常见的问题。