我在这里查看了文档:
https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-for-mac
它没有提及boot2docker
的任何内容,尽管其他一些问题也谈到了这一点:
Mount volume to Docker image on OSX
所以问题是 - Docker for Mac
应用程序通过Preferences -> File Sharing
提供文件共享; 如何使用docker镜像中的这些共享文件夹(例如,如果一个ssh进入docker镜像)?当我说怎么做时,我的意思并不是“用例是什么”,我的意思是“请给我一个如何从正在运行的容器的命令行访问共享文件夹的示例”。
理想情况下,我正在尝试为Vagrant的同步文件夹创建一个类似的场景,我可以在我的Host env上编辑文件,独立于Docker Image,但这些文件会在保存时自动更新为Docker镜像。
要清楚,提出这个问题的原因是因为我无法使-v
docker命令起作用。例如。
docker run -v /Users/geoidesic/Documents/projects/arc/mysite/djangocms_demo:/home/djangocms/djangocms/djangocms_demo -d -p 8001:8000 --name test_shared_volumes bluszcz/djangocms
使用上述命令,容器会立即停止,因此如果我运行docker ps
,则运行容器列表为空。
但是,如果我在没有-v
命令的情况下运行容器,那么它将按预期保持运行:
docker run -d -p 8001:8000 --name test_shared_volumes bluszcz/djangocms
答案 0 :(得分:1)
更新:
好吧,如果你想在主机和容器之间共享文件/目录,那么你将会使用Docker的bind-mount。
例如,如果我想将我的主人/etc/resolv.conf
分享到我的容器,我会执行以下操作:
docker run -v /etc/resolv.conf:/etc/resolv.conf <IMAGE>
-v ...
部分告诉容器重用主机/etc/resolve.conf
。每当我编辑此文件时,容器都会立即看到更改。
在Linux中,您可以使用这种方式将几乎任何主机文件共享到容器中。不幸的是,Mac并非如此。正如我在旧回答中提到的,默认情况下,您只能直接分享/Users/
,/Volumes/
,/private/
和/tmp
。
在我的Mac上说,我想将/data
目录共享给容器。我在命令下运行:
docker run -it --rm -v /data:/data busybox sh
然后它会弹出一个不愉快的错误:
docker: Error response from daemon: Mounts denied:
The path /data
is not shared from OS X and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.
所以你看,这就是File Sharing
出现的地方。
然后是我的问题答案:
File Sharing
并不像您在Vagrant中所体验到的那样为您提供随时可用的分享方式; 希望有所帮助。
旧答案:
Docker的绑定安装功能使用 File Sharing
。默认情况下,您可以直接在/Users/
,/Volumes/
,/private/
和/tmp
中绑定文件。对于其他路径,您需要先将它们添加到Preferences -> File Sharing
。
bind-mount的用例:
注意:对于#1和#2情况,请考虑使用卷而不是bind-mount。