如何在ubuntu14.04上将目录或文件复制到本地主机上的docker镜像?

当我通过Dockerfile添加一个文件或目录到Docker图像时,我使用ADD或COPY,但是我想要添加或复制的文件path必须是Dockerfile目录的相对path。 有没有一种方法通过使用绝对path添加文件或目录从本地主机到docker的图像? 顺便说一句,为什么“dockerCP”只能支持从Docker镜像复制文件到本地主机? 相反,它不起作用?

简单的答案是它不被支持

从Docker文档 :

<src>path必须位于构build的上下文中; 你不能添加../something /东西,因为docker build的第一步是将上下文目录(和子目录)发送到docker守护进程。

此外,不支持符号链接,因此不可能通过链接到本地​​主机上的不同位置来欺骗构build。

但是, URL是被支持的,所以解决这个问题的一个方法是如果你在本地主机上(或者在一个docker容器中)启用一个web服务器,通过HTTP提供文件。

不幸的是,命令docker cp只支持从容器到主机,反之亦然。 这在文档中有描述。 解决这个问题的方法是使用可以共享数据的docker卷 。

对于使用作曲者的解决scheme是使用指向该文件夹的卷 :

 #docker-composer.yml foo: build: foo volumes: - /local/path/:/path/:ro 

但我很确定可以在Dockerfile中使用卷来完成。

当你使用docker-compose时有一个解决方法:

 api1: build: . dockerfile: cluster/manifests/Dockerfile-NodeAPI ports: - 8080 links: - mongo - redis command: "nodemon lib/app.js -e js,json,scss,css,html" 

这仍然不会允许你做亲属path,但是Dockerfile中的basepath将是./而不是cluster/manifests/

要复制文件,只需使用docker cp

 docker cp file.txt CONTAINER:/path/to/dest 

要复制目录,请使用tarpipe道:

 tar -c "dir/" | docker run -i -a stdin CONTAINER tar -xC /path/to/dest 

对wassgren的回答进行解释,你也可以使用docker SDK来做到这一点。 我不确定每个SDK,但至lessdocker-java将上下文作为inputstream发送到docker。 所以,你指定dockerClient.withBaseDirectory()dockerClient.withDockerFile() 。 你可以使用更多脚本的方法,并使用gradle或groovy来做到这一点,并避免每次“编译”java。