Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos docker使用xhyve在osx上编写装载主机目录_Macos_Docker_Docker Compose_Dockerfile_Docker Machine - Fatal编程技术网

Macos docker使用xhyve在osx上编写装载主机目录

Macos docker使用xhyve在osx上编写装载主机目录,macos,docker,docker-compose,dockerfile,docker-machine,Macos,Docker,Docker Compose,Dockerfile,Docker Machine,因此,我的问题与将主机目录从osx macbook装入机器内部运行的容器有关 在我以前的公司中,他们使用devops,我们使用docker和virtualbox,我注意到他们使用VBoxManage将目录装载到docker机器中,然后将这些文件夹装载到容器中 然而,现在我使用的不是virtualbox,而是xhyve虚拟机,我想知道如何访问容器中的主机目录 我想托管数据库和代码库,将它们托管在nginx容器中,然后当代码在主机上时,使用IDEA编辑代码,这将为我提供一个工作平台 然而,每当我按照

因此,我的问题与将主机目录从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
version: "2"
services:
  nginx_php:
    build: docker/nginx
    ports:
      - "10000:80"
    volumes:
      - .:/var/test
我的docker作文是这样的:

FROM nginx:latest
RUN rm /etc/nginx/conf.d/default.conf
ADD ./default.conf /etc/nginx/conf.d/
EXPOSE 80
EXPOSE 443
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中,我找到了projects

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

因此,我更进一步,在这个过程之前,我创建了一个名为“angi”的目录,如果我列出项目的内容,我可以像预期的那样看到angi目录

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

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


有人知道会出什么问题吗?

我也有同感。我已经安装了docker/docker machine/docker machine驱动程序xhyve(通过自制),并且存在同样的问题

我认为现在发生的是,您正在主机上创建一个卷—在本例中,它是docker机器,而不是mac os主机。我认为需要再跳一次。。。我不确定这是怎么发生的


但我可以确认,使用花园品种清洁码头应用程序会为您解决这一问题

正如Daniel指出的,MacOS Docker容器卷不是装载到主机MacOS,而是装载到中间VM

所以有两种选择

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

或者,您可以使用sshfs执行附加步骤半自动:

docker-machine mount default:[/mountpoint] [localpath]
第二个选项需要sshfs,可从brew获得

brew tap caskroom/cask
brew cask install osxfuse
brew install sshfs
详情请参阅


也要小心,因为它是单向同步选项。如果您需要从机器上获取某些内容,请确保将其还原。

我没有找到解决问题的方法,除了停止使用旧的docker并使用docker for Mac之外,我已在本github中描述了该问题: