docker使用xhyve在osx上编写mount主机目录

问题描述 投票:2回答:2

所以我的问题与将我的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-compose时,然后使用“docker exec -it bash”shell进入docker容器我可以列出目录并找到/ var / test并且它包含SOMETHING,但不是我期望的。

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

但是,我没有找到“堆栈”这只是一个旧的遗留目录,无论它是什么,但我没有找到它,所以它似乎已经挂载“。”但它没有展示一切,只是某些东西。

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

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

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

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

macos docker docker-compose dockerfile docker-machine
2个回答
2
投票

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

我想发生了什么,你在主机上创建一个卷 - 在这种情况下是docker-machine,而不是你的mac os主机。我认为还有另一个跳跃......如何发生,我不确定。

但我可以确认,使用花园品种干净的docker app为您解决这个问题。


1
投票

正如Daniel所指出的那样,MacOS Docker容器卷不是安装在主机MacOS上,而是安装在中间VM上。

所以有两种选择

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

docker-machine scp [localfiles] default:./

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

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

第二个选项需要brew提供的sshfs

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

更多细节发布在https://docs.docker.com/machine/reference/mount/

另外要小心,因为它是单向同步选项。如果你需要从机器上获取东西,请确保将其缩回。

© www.soinside.com 2019 - 2024. All rights reserved.