与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
答案 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: