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
使用“docker build”时如何获取主机地址?_Docker - Fatal编程技术网

使用“docker build”时如何获取主机地址?

使用“docker build”时如何获取主机地址?,docker,Docker,我需要在docker构建期间引用主机或主机网络,在docker文件中,我该如何做?我想这样做,克隆一些git repo,或者scp一些文件来设置映像 克隆github repo很容易,因为docker将为此解析dns。但是,我没有可用于正在构建的docker映像的主机网络的dns条目 事实上,我甚至不知道主机的ip地址是什么,更不用说设置dns了。您试图做的事情与Dockerfile的想法背道而驰 Dockerfile的目的是提供图像的描述,同时保证再现性。这就是为什么Dockerfile中没有

我需要在docker构建期间引用主机或主机网络,在docker文件中,我该如何做?我想这样做,克隆一些git repo,或者scp一些文件来设置映像

克隆github repo很容易,因为docker将为此解析dns。但是,我没有可用于正在构建的docker映像的主机网络的dns条目


事实上,我甚至不知道主机的ip地址是什么,更不用说设置dns了。

您试图做的事情与Dockerfile的想法背道而驰

Dockerfile的目的是提供图像的描述,同时保证再现性。这就是为什么Dockerfile中没有任何特定于主机的文件,因此可以在任何地方生成该文件,并获得相同的结果


如果您需要与主机进行更紧密的交互,这意味着您的结果将与此主机紧密关联,您应该在运行时执行此操作。查看CMD或ENTRYPOINT,让容器在启动时执行某些操作。

您试图执行的操作与Dockerfile的想法背道而驰

Dockerfile的目的是提供图像的描述,同时保证再现性。这就是为什么Dockerfile中没有任何特定于主机的文件,因此可以在任何地方生成该文件,并获得相同的结果


如果您需要与主机进行更紧密的交互,这意味着您的结果将与此主机紧密关联,您应该在运行时执行此操作。查看CMD或ENTRYPOINT,让容器在启动时执行某些操作。

您不知道Docker主机似乎很奇怪。我甚至不知道这怎么可能

只需在构建过程中传入主机信息即可

docker运行-e docker_主机=1.2.3.4 busybox环境


或者,您必须使用某种类型的发现系统,如DNS、etcd、zookeeper或Consour。

您不知道Docker主机似乎很奇怪。我甚至不知道这怎么可能

只需在构建过程中传入主机信息即可

docker运行-e docker_主机=1.2.3.4 busybox环境


或者,您必须使用某种发现系统,如DNS、etcd、zookeeper或Consour。

从docker api 1.25开始,您现在只需执行以下操作:

docker build --network=host -f myDockerFile ...

这将允许您在构建期间访问主机网络。

从docker api 1.25开始,您现在只需执行以下操作:

docker build --network=host -f myDockerFile ...

这将使您能够在构建过程中访问主机网络。

可能会有所帮助。我想我将以不同的方式处理此问题—从映像中所需的源创建.deb工件。将它们从CI构建放置的位置scp到当前目录。以该目录作为上下文构建,并在docker容器中使用dpkg安装它们。可能会有帮助,我想我将以不同的方式处理这个问题——从我的图像中需要的源创建.deb工件。将它们从CI构建放置的位置scp到当前目录。以该目录作为上下文构建-并在docker容器中使用dpkg安装它们。我不想在docker Hub上共享这些docker文件,而将我的源代码放在GitHub上,此代码是私有的。我所要做的就是在构建期间将私有资源放到映像上。它只会建立在一个特定的主机网络上,这是真的,但最终的映像仍然能够部署到云端;如果这与Dockerfile的想法相悖,我应该以另一种方式做我正试图做的事情。看到我在OP上的评论,我将构建一些.deb包,然后将它们放在构建上下文中,然后运行“docker build”。我不想在docker Hub上共享这些docker文件,并将我的源代码放在GitHub上,这些代码是私有的。我所要做的就是在构建期间将私有资源放到映像上。它只会建立在一个特定的主机网络上,这是真的,但最终的映像仍然能够部署到云端;如果这与Dockerfile的想法相悖,我应该以另一种方式做我正试图做的事情。看到我在OP上的评论,我将构建一些.deb包,然后将它们放在构建上下文中,然后运行“docker build”。但是我想使用“docker build”而不是“docker run”。那么你的问题就不是docker问题了。在docker生成之前,您需要一个脚本来修改docker文件,或者您需要使用DNS的经典发现方法。但是我想使用“docker build”而不是“docker run”。那么您的问题就不是docker问题了。在docker构建之前,您需要一个脚本来修改docker文件,或者您需要使用DNS的经典发现方法。