如何在Docker for Mac上访问共享卷

时间:2018-03-26 10:17:34

标签: macos docker

我在这里查看了文档:

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镜像。

UPDATE:

要清楚,提出这个问题的原因是因为我无法使-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

1 个答案:

答案 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出现的地方。

然后是我的问题答案

  1. File Sharing并不像您在Vagrant中所体验到的那样为您提供随时可用的分享方式;
  2. 要在主机和容器之间共享文件/文件夹,请使用Dockers bind-mount。
  3. 希望有所帮助。

    旧答案:

    Docker的绑定安装功能使用

    File Sharing。默认情况下,您可以直接在/Users//Volumes//private//tmp中绑定文件。对于其他路径,您需要先将它们添加到Preferences -> File Sharing

    bind-mount的用例:

    1. 保留正在运行的容器生成的数据,以便您可以备份或迁移数据。
    2. 共享数据量多个正在运行的容器。
    3. 将主机配置文件共享到容器。
    4. 在主机和容器之间共享源代码,以便更轻松地进行调试。
    5. 注意:对于#1和#2情况,请考虑使用卷而不是bind-mount。