docker 使用 xhyve 在 osx 上组合挂载主机目录

docker compose mount host directory on osx with xhyve

所以我的问题与将主机计算机目录从我的 osx macbook 挂载到机器内部的容器 运行 中有关。

在我以前的公司里,他们使用 devops,我们使用 docker 和 virtualbox,我注意到他们使用 VBoxManage 将目录挂载到 docker 机器上,然后从那里将这些文件夹挂载到容器。

但是,现在我使用的不是 virtualbox,而是 xhyve 虚拟机,我想知道如何访问容器内的主机目录。

我想托管数据库和代码库,将它们托管在 nginx 容器中,然后当代码在主机上时,使用 IDEA 编辑代码,然后给我一个工作平台。

但是,每当我按照我认为应该起作用的说明进行操作时,它似乎都无法正常工作。

比如我的nginx配置是这样的:

FROM nginx:latest
RUN rm /etc/nginx/conf.d/default.conf
ADD ./default.conf /etc/nginx/conf.d/
EXPOSE 80
EXPOSE 443

而我的docker作文是这样的:

version: "2"
services:
  nginx_php:
    build: docker/nginx
    ports:
      - "10000:80"
    volumes:
      - .:/var/test

现在,当我执行 docker-compose 时,然后使用 "docker exec -it bash" shell 进入 docker 容器,我可以列出目录并找到 /var/test它包含一些东西,但不是我所期望的。

例如,在“.”中我在 docker compose 的 volumes 语句中使用的目录,我确实有一个名为 projects 的目录,在 docker 容器的 /dev/test 中,我确实找到了项目。

然而,我没有找到 "stacks" 这只是一个旧的遗留目录,不管它是什么,但我没有找到它,所以它似乎已经挂载了“。”但它并没有显示所有内容,仅显示某些内容。

所以我更进一步,我在此过程之前创建了一个名为 "angi" 的目录,如果我列出项目的内容,我可以按预期看到 angi 目录。

所以更进一步,我创建了一个名为 "monkey" 的目录,但是当我重建容器并再次启动它们时,我可以看到“/projects/angi”但我看不到“ /projects/monkey"

所以 wtf....它就像是挂载文件系统的一半,或者有选择地向我显示某些部分,或类似的东西,我现在不确定如何挂载主机目录,因为我没有得到我期望的结果.

有人知道可能出了什么问题吗?

我在同一条船上。我安装了 docker/docker-machine/docker-machine-driver-xhyve(通过自制软件)并且遇到了同样的问题。

我认为发生的事情是,您正在 host 上创建一个卷 - 在本例中是 docker-machine,而不是您的 mac os host。我认为需要再跳一次……我不确定这是怎么发生的。

但我可以确认,使用 garden variety clean docker 应用程序可以为您解决这个问题。

正如 Daniel 指出的 MacOS Docker 容器卷不是用来托管 MacOS,而是用来装载中间 VM。

所以有两个选择

您可以使用(如果您的 VM 名为 default)将您需要的内容复制到 VM

docker-machine scp [localfiles] default:./

或者您可以使用 sshfs 执行额外的半自动步骤:

docker-machine mount default:[/mountpoint] [localpath]

第二个选项需要 sshfs,可以从 brew

brew tap caskroom/cask
brew cask install osxfuse
brew install sshfs

详情请见https://docs.docker.com/machine/reference/mount/

还要小心,因为它是单向同步选项。如果您需要从机器中获取某些东西,请确保将其返回。