如何从另一台机器中提取docker容器中的文件?

时间:2017-06-29 21:33:18

标签: docker file-transfer scp

我在本地网络上有一台生成文件的机器。它没有运行Docker,因为它是一台低功耗单板计算机。我编写了一个Docker容器,可以在服务器上运行,以获取这些文件,处理它们,然后将处理过的文件吐出来。

我的问题是将文件从机器传输到Docker容器进行处理。我以为我会使用scp,但它不起作用,因为Docker容器不应该sshd运行。

我没有看到使用Docker Volume的方法,生成要处理的文件的设备与运行Docker的主机是分开的。 scp将是一种干净的方式,因为生产者可以复制文件而不知道它是否由Docker容器,VM或真实机器处理。

此时我有哪些选择?我应该尝试通过(S)FTP或HTTP(S)执行此操作吗?有没有更好的办法?

2 个答案:

答案 0 :(得分:0)

这可能是在docker容器中安装sshd然后使用scp的好方法。

是否将sshd,sftp或其他基于协议的文件传输服务安装到容器中,并没有太大的区别,我不会想到。

我能看到的其他选项是让生成文件的计算机将它们发送到docker容器可以到达的位置。也许是一个共享的网络文件夹。

docker容器可以直接安装网络驱动器,并通过已安装的文件夹获取文件。

答案 1 :(得分:0)

NFS怎么样?您可以在当前运行NFS服务器的容器旁边运行第二个Docker容器,并安装卷来存储数据:

docker volume create mydata
docker run -d --privileged --restart=always \
-v mydata:/nfs \
-e NFS_EXPORT_DIR_1=/nfs \
-e NFS_EXPORT_DOMAIN_1=\* \
-e NFS_EXPORT_OPTIONS_1=ro,insecure,no_subtree_check,no_root_squash,fsid=1 \
-p 111:111 -p 111:111/udp \
-p 2049:2049 -p 2049:2049/udp \
-p 32765:32765 -p 32765:32765/udp \
-p 32766:32766 -p 32766:32766/udp \
-p 32767:32767 -p 32767:32767/udp \
fuzzle/docker-nfs-server:latest

然后,通过安装相同的卷来摄取第二个容器中的数据:

docker run -d --name myingester -v mydata:/path/for/processing myingesterimage

现在,您只需将数据生成器上的NFS文件夹(使用Docker主机IP)挂载到它写入的文件夹中,数据就可以在卷中使用。

您可以稍后将其整理到docker-compose.yml文件中并排展开(我将把这个练习留给您)。我在https://hub.docker.com/r/fuzzle/docker-nfs-server/找到的图片示例。但看起来还有许多其他NFS服务器容器示例。