docker cp不会将文件复制到容器中

我有一个dockerized项目。 我build立,从主机系统复制一个文件到docker集装箱,然后壳到容器中,发现该文件不存在。 docker cp应该如何工作?

 $ docker build -q -t foo . Sending build context to Docker daemon 64 kB Step 0 : FROM ubuntu:14.04 ---> 2d24f826cb16 Step 1 : MAINTAINER Brandon Istenes <redacted@email.com> ---> Using cache ---> f53a163ef8ce Step 2 : RUN apt-get update ---> Using cache ---> 32b06b4131d4 Successfully built 32b06b4131d4 $ docker cp ~/.ssh/known_hosts foo:/root/.ssh/known_hosts $ docker run -it foo bash WARNING: Your kernel does not support memory swappiness capabilities, memory swappiness discarded. root@421fc2866b14:/# ls /root/.ssh root@421fc2866b14:/# 

你需要docker exec来进入你的容器,你的命令创build一个新的容器。

我有这个别名与容器的壳进入最后创build的容器

alias exec_last='docker exec -it $(docker ps -lq) $(docker inspect -f {{'.Path'}} $(docker ps -lq))'

所以有一些与图像和容器的名称混淆。 显然,cp操作是在一个不同的容器上运行,而不是我用run命令提出的。 无论如何,正确的程序是:

 # Build the image, call it foo-build docker build -q -t foo-build . # Create a container from the image called foo-tmp docker create --name foo-tmp foo-build # Run the copy command on the container docker cp /src/path foo-tmp:/dest/path # Commit the container as a new image docker commit foo-tmp foo # The new image will have the files docker run foo ls /dest 

你使用什么docker版本? 根据Docker 1.8 cp支持从主机复制到容器:

•将文件从主机复制到容器:docker cp用于仅将容器中的文件复制到主机,但是现在可以相反:docker cp foo.txt mycontainer:/foo.txt

请注意图像和容器之间的区别。 如果您希望从Dockerfile创build的每个容器都包含该文件(即使您之后不复制),则可以在Dockerfile中使用COPY和ADD。 如果要在从映像创build容器复制文件则可以在版本1.8中使用docker cp命令。