使用Dockerfile将文件从Container复制到主机

时间:2018-06-13 09:00:07

标签: docker dockerfile

我正在写一个Docker文件,我的要求是将容器内文件夹的内容复制到本地主机。我怎么能实现这个目标呢?

namespace AX2018
{
    public async void Connect()
    {
        public class Bluetooth : SoundScapeData
        ...
        var dbValue = (double)BitConverter.ToUInt16(temp1, 0) / 256 * 48;
        SPL = dbValue;
        ...
    }
}

3 个答案:

答案 0 :(得分:2)

在构建期间将文件从容器复制到主机可能是个坏主意。你应该认真考虑你的用例。

然而,它可以完成,我会与你分享一个程序b / c这是我展示我的Docker知识的机会 - 而不是b / c我认为你应该这样做。还有其他方法可以做到这一点。我的方式并不是更好或更糟 - 它们都是克拉德。

  1. 按照https://success.docker.com/article/how-do-i-enable-the-remote-api-for-dockerd中的说明修改dockerd配置。基本上添加-H tcp://0.0.0.0:2376。这是一个非常危险的程序b / c它会打开你的网络上的任何人。有一些方法可以通过身份验证来降低这种风险,但最好的方法是只是做它
  2. 修改您的Dockerfile:
    1. 在RUN阻止之前添加ARG DOCKER_HOST
    2. 在跑步区:
      1. 安装docker。
      2. 添加`export DOCKER_HOST = $ {DOCKER_HOST}。
      3. 添加docker container run --mount type=bind,source=/,destination=/srv/host alpine:3.4 ...
  3. 确定主机的IP地址。我们假设它是10.10.20.100。
  4. 通过添加--build-arg DOCKER_HOST = 10.10.20.100来修改您的构建命令。
  5. 在步骤2.2.3中,您已经植根了主机,您可以随心所欲 - 包括写入任何文件。

    这是一个愚蠢的想法,但它表明,既然你可以从一个构建中运行docker,那么在构建中确实没有你无法做到的事情。如果你想从构建中运行一个gui应用程序,你就可以做到。

答案 1 :(得分:1)

docker build期间,不支持使用语句编写Dockerfile来修改主机上的文件。您应该记住,实际的图像构建可能发生在另一个Docker引擎中,而不是您启动构建的引擎(Dockerfile及其构建上下文被上传到Docker引擎)。

这里至少有两个选项:

1)编写RUN语句,使用BUILD_ARG与其他主机联系并在那里触发某些操作。我认为这是一个非常糟糕的黑客攻击,因此我不想更具体地说明该语句的外观。

2)执行正常docker run所需的操作,您可以将主机目录作为卷安装到容器中。

我还没有查看https://github.com/genuinetools/img工具。它还旨在构建图像,但可能在构建期间提供更多可能性。

答案 2 :(得分:0)

在构建过程中没有特定的方法可以执行此操作。在运行时,您可以通过已安装的卷复制文件,但在构建过程中不可用。如果您只是在运行时,那么您可以执行docker run -v .:/out myimage -- cp -r /from/somewhere /out或类似的操作。