复制多个本地文件到docker容器

问题描述 投票:0回答:6

类似于将文件从主机复制到 Docker 容器,但

docker cp
似乎不适用于多个文件

$ docker cp data/a.txt sandbox_web_1:/usr/src/app/data/

工作正常,但是

$ docker cp data/*txt sandbox_web_1:/usr/src/app/data/

docker: "cp" requires 2 arguments.
See 'docker cp --help'.

Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

Copy files/folders between a container and the local filesystem
Use '-' as the source to read a tar archive from stdin
and extract it to a directory destination in a container.
Use '-' as the destination to stream a tar archive of a
container source to stdout.

在 Ubuntu 14.04x64 上使用 docker 1.11.1

docker copy
6个回答
49
投票

有一个提案

docker cp
支持通配符(7710),但尚未实施。

这样您就可以使用 bash 脚本编写,对每个文件使用

docker cp

for f in data/*txt; do docker cp $f sandbox_web_1:/usr/src/app/data/; done

21
投票

以下命令应将整个目录数据及其数据目录的内容复制到您所需的目的地:

docker cp data/ sandbox_web_1:/usr/src/app/

在 Docker 版本 1.12.1 上进行了测试,但我没有发现 1.12.1 版本中的 cp 命令有任何更改


5
投票

我使用的是 Docker 版本 18.09,发现我能够通过运行以下命令将所有文件从当前本地目录复制到容器的根目录:

docker cp ./ image_name:


3
投票

当我们位于需要将其内容批量复制到容器中的目录中时,Docker cp 工作得非常好。显然,使用 docker cp 命令复制多个文件时不支持星号通配符 (*)。

复制的是内容而不是目录。

另外,给出了 docker 版本以供参考。尽管如此,直到最近这篇文章才对 docker cp 进行了很大的更改。

[root@stnm001 hadoop-configs]# docker version
Client:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:
 OS/Arch:      linux/amd64
[root@stnm001 hadoop-configs]#

[root@stnm001 hadoop-configs]# docker cp ./  "xyz-downloader:/etc/hadoop/conf"
[root@stnm001 hadoop-configs]#
[root@stnm001 hadoop-configs]# ls
capacity-scheduler.xml  container-executor.cfg  dfs.exclude    hadoop-metrics2.properties  hadoop-policy.xml  hdfs-site.xml     slaves          ssl-server.xml  yarn.exclude
configuration.xsl       core-site.xml           hadoop-env.sh  hadoop-metrics.properties   hbase-site.xml     log4j.properties  ssl-client.xml  yarn-env.sh     yarn-site.xml
[root@stnm001 hadoop-configs]#
[root@stnm001 hadoop-configs]#
[root@stnm001 hadoop-configs]# docker exec -it xyz-downloader bash
[root@xyz-downloader /]#
[root@xyz-downloader /]#
[root@xyz-downloader /]# cd /etc/hadoop/conf/
[root@xyz-downloader conf]# ls -ltrh
total 100K
-rw-r--r-- 1 root root  318 May 20 06:57 container-executor.cfg
-rw-r--r-- 1 root root 1.4K May 20 06:57 configuration.xsl
-rw-r--r-- 1 root root 3.6K May 20 06:57 capacity-scheduler.xml
-rw-r--r-- 1 root root 1.8K May 20 06:57 hadoop-metrics2.properties
-rw-r--r-- 1 root root 3.6K May 20 06:57 hadoop-env.sh
-rw-r--r-- 1 root root    0 May 20 06:57 dfs.exclude
-rw-r--r-- 1 root root 1.4K May 20 06:57 core-site.xml
-rw-r--r-- 1 root root 5.2K May 20 06:57 hdfs-site.xml
-rw-r--r-- 1 root root 9.1K May 20 06:57 hadoop-policy.xml
-rw-r--r-- 1 root root 2.5K May 20 06:57 hadoop-metrics.properties
-rw-r--r-- 1 root root  891 May 20 06:57 ssl-client.xml
-rw-r--r-- 1 root root  102 May 20 06:57 slaves
-rw-r--r-- 1 root root  15K May 20 06:57 log4j.properties
-rw-r--r-- 1 root root 4.7K May 20 06:57 yarn-env.sh
-rw-r--r-- 1 root root  891 May 20 06:57 ssl-server.xml
-rw-r--r-- 1 root root  11K May 20 06:57 yarn-site.xml
-rw-r--r-- 1 root root    0 May 20 06:57 yarn.exclude
-rw-r--r-- 1 root root 2.7K May 20 06:58 hbase-site.xml
[root@xyz-downloader conf]#

3
投票

将 @Aaron 的 answer

()
在 bash 中提供 subshell 的事实混合在一起,我能够通过以下方式完成此任务:

(cd data && docker cp ./ sandbox_web_1:user/src/app/)

它利用了这样一个事实:

./
几乎是唯一可以将多个文件传递给
docker cp
的参数。


0
投票

命令管道也可用于将多个文件复制到 Docker 容器。以下管道对我有用:

ls *txt | xargs -I{} docker cp {} <container_id>:<dest_inside_container>

© www.soinside.com 2019 - 2024. All rights reserved.