栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Mac上的Docker机器:在docker主机/ docker-machine上看不到已装载的卷?卷物理存储在哪里?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mac上的Docker机器:在docker主机/ docker-machine上看不到已装载的卷?卷物理存储在哪里?

好的,这里有几点需要解决。

让我们从泊坞窗卷的内容开始(此时不要尝试考虑您的Macbook或无所事事的机器。请记住泊坞窗使用不同的文件系统(无论此时它可能驻留在何处)):就像这样,Docker内部的每个卷本身只是docker使用的内部文件系统的一部分。容器可以使用这些卷,就像它们是“小型硬盘”一样,可以由它们安装并在它们之间共享(或由它们中的两个同时安装,例如将某些ftp服务器的超快速版本安装到两个客户端上或任何:P)。

原则上,您可以通过Dockerfile的VOLUME指令声明这些卷(仍然不考虑您的计算机/游民本身,只是dockers)。标准示例,运行一个Web服务器容器,如下所示:

FROM: nginxVOLUME /www

现在,理论上/
www中的所有内容都可以从一个容器安装和卸载,也可以安装到多个容器。现在Nginx本身很无聊,因此我们希望php在Nginx存储的文件上运行以产生更多有趣的内容。=>我们需要将该卷装入某些php-
fpm容器中。在我们的撰写文件中,我们将执行此操作

web:  image: nginxphp:  image: php-fpm  volumes_from:    - web

=>瞧!在nginx / web容器中,由VOLUME指令声明的每个文件夹都将在php中可见。这里要注意的重要一点是,nginx的/ www中的内容将覆盖/
www中的php。如果您输入:ro,php甚至无法写入该文件夹:)

现在接近您的问题,还有另一种声明卷的方法,即不需要在Dockerfile中声明它们。这可以通过从主机挂载卷来完成(在这种情况下,您是vagrant /
boo2docker)。让我们讨论一下,就好像我们首先在本机Linux上运行一样。

如果您要输入以下内容:

volumes: - /home/myuser/folder:/folder

在您的docker-compose.yml中,这意味着/ home / myuser / folder现在将被安装到docker中。它会覆盖docker在/
folder中的所有内容,就像/ www也可以从声明它的东西中访问。现在,正在运行docker daemon的Linux计算机。

理论上是如此:),实际上,您可能只需要以下建议即可开始工作:):

boot2docker / docker-machine /
kitematic和所有这些东西处理问题的方式很简单,它们首先只是将无聊的机器中的一个卷挂载到docker容器上,然后他们也将这个东西挂载到Mac文件系统中,希望一切都能解决:P

现在,对于实际问题,我们所有人在Mac上使用此功能(或只是试图帮助其同事进入甜蜜的Docker:P领域)都面临权限问题。我的意思是考虑一下(root或其他一些用户处理容器中的文件,用户vagrant可能会处理vagrant主机中的文件,然后您的Mac用户“
skalfyfan”会处理Mac中的这些文件。它们都有不同的用户ID和whatnot =

随之而来的是许多问题,并且在一定程度上取决于您在Docker中实际运行的内容。Mysql和Apache尤其痛苦,因为它们不是在容器中以root用户身份运行,这意味着,它们通常难以写入Mac文件系统。

在尝试下面的第二种方法之前,只需尝试将容器卷放在Mac主目录下。随着时间的推移,这将解决大多数情况下MySQL的问题。顺便说一句:
无需声明卷./folder的完整路径就可以了,并且可以相对于docker-compose.yml所在的位置进行读取!

只需将compose-yml放入Mac用户文件夹中,这很重要。chmod 777 -R:P不会在这里为您提供帮助,它只需要位于您的主文件夹下即可:)

仍然有些应用程序(例如Apache)仍然会给您带来麻烦。容器中运行的任何用户ID与Mac用户ID都不相同的事实会让您一生难忘。为了解决这个问题,您需要以与Mac权限不冲突的方式调整用户ID和用户组。在Mac上您想要的组是人员,可以工作的UID例如为1000。因此,您可以将其放在Dockerfile的末尾:

RUN usermod -u 1000 www-dataRUN usermod -G staff www-data

要么

RUN usermod -u 1000 mysqlRUN usermod -G staff mysql

因此,您现在已经了解到:

从理论上讲,我认为应该先将本地Mac文件系统文件夹./src复制到我的VM,然后再执行此卷声明。似乎docker-
compose神奇地一次完成了所有工作?

正确的是,它做到了:)

最后,我们可以看到我正在创建一个仅数据容器来保留我的mysql数据。我已经声明:卷:-/ var / lib / mysql

您错了:)如前所述,如果您不提供主机文件夹,则Docker将保留此路径。但是仅针对此容器,所有内容都将保留在docker文件系统中。什么都没有写到主机!仅当在容器文件夹之前指定主机文件夹时,才会发生这种情况!

希望这有帮助:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/468926.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号