Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/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
从docker容器内部获取有关卷的信息_Docker - Fatal编程技术网

从docker容器内部获取有关卷的信息

从docker容器内部获取有关卷的信息,docker,Docker,在一个容器中,我构建了一个(C++)应用程序。源代码目录与--volume共享。 如果docker在Linux上运行,共享目录将全速运行,但是如果docker在mac上运行,docker必须桥接共享,这将导致速度下降。因此,在开始编译之前,我必须将整个源目录复制到容器中。但此复制步骤仅在非Linux主机上是必需的 如何检测共享是否为“本机”共享 我可以从容器中获取有关主机操作系统的信息吗 更新 此工作流背后的思想是为定义的环境设置一个映像,以便为多个平台(win、mac、linux)交叉构建产品

在一个容器中,我构建了一个(C++)应用程序。源代码目录与
--volume
共享。 如果docker在Linux上运行,共享目录将全速运行,但是如果docker在mac上运行,docker必须桥接共享,这将导致速度下降。因此,在开始编译之前,我必须将整个源目录复制到容器中。但此复制步骤仅在非Linux主机上是必需的

如何检测共享是否为“本机”共享

我可以从容器中获取有关主机操作系统的信息吗

更新

此工作流背后的思想是为定义的环境设置一个映像,以便为多个平台(win、mac、linux)交叉构建产品。否则,每个开发人员都会安装不同的Linux操作系统/编译器/组件等


作为一名docker新手,我认为这个映像(包含所有必需的第三方组件/编译器)可以在应用程序启动时用于在容器中构建应用程序。

我可以想到的一个解决方法是,您可以使用一种特殊的网络功能,该功能在Mac和Windows主机中都可用,但在Linux中不可用

这是一个特殊的dns条目,您可以使用它从容器内部获取主机的ip-host.docker.internal。多读多读


现在,您只需要一个命令来获取布尔值,无论它是否解析。因为我不知道您使用的是哪个shell,所以我不能肯定,但是类似的东西应该会对您有所帮助。

在我看来,您从错误的角度看待这个问题

首先,编译应该在构建时完成,而不是在运行时。如果您在容器中执行此操作,则意味着您正在使用构建工具发送一个映像,而不是说映像的用户需要源代码来运行映像。出于这个原因,最好在构建时编译,并且只发送一个带有二进制文件的映像来运行

其次,在构建时编译速度很快,因为源代码被发送到docker守护进程并直接从那里访问,不需要卷


最后,回答您的最后一个问题,是您运行容器。因此,只需添加和环境变量(例如),就可以告诉它运行的主机的所有信息。当您在启动容器时已经有了这些信息时,只运行容器并让它猜测它正在运行的位置太复杂了。

我在创建容器时使用了
--env DO_COPY=1

感谢您的输入。关于我更新过的问题,您是否会使用环境创建一个基本映像设置,并让开发人员在运行时构建另一个编译源代码的映像?如果来源发生变化,我将不得不创建另一个图像。。。。。。并重新构建整个项目,不能使用。您可以始终创建开发基础映像。您可以在其中安装所需的所有依赖项。这是你可以分发的东西。然后,您可以扩展该映像并装载或复制源代码。由于这是您在新映像中唯一要做的事情,因此它变得微不足道,而且主机操作系统并不重要,因为用户/开发人员将负责为他们选择最佳解决方案。感谢您的想法,我也考虑过这一点。其想法是在任何机器上使用映像,只需安装docker,主机上不提供任何服务。