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

时间:2016-05-11 05:36:32

标签: docker copy

Copying files from host to Docker container类似,但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

5 个答案:

答案 0 :(得分:15)

proposal for docker cp to support wildcards (7710),但尚未实施。

这样就可以使用docker cp为每个文件留下bash脚本:

pagination

答案 1 :(得分:8)

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

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

在Docker版本1.12.1上测试过,但我没有在1.12.1版本中找到对cp命令的任何更改

答案 2 :(得分:2)

当我们位于目录中时,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 :(得分:2)

()用bash表示answer的方式混合@Aaron的subshell,我能够通过以下方式实现此目的:

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

利用了以下事实:./几乎是唯一可以将多个文件传递到docker cp的参数。

答案 4 :(得分:1)

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