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

时间:2015-08-20 07:28:15

标签: docker

我有一个dockerized项目。我构建,将文件从主机系统复制到docker容器中,然后shell进入容器,发现文件不存在。 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:/#

3 个答案:

答案 0 :(得分:2)

所以有一些与图像和容器名称的混淆。显然,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

答案 1 :(得分:1)

您需要docker exec进入容器,您的命令会创建一个新容器。

我有这个别名来进入最后一个用容器的外壳创建的容器

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

答案 2 :(得分:0)

您使用的是什么泊坞版?根据{{​​3}} cp支持从主机复制到容器:

  

•将文件从主机复制到容器:docker cp过去只用于将容器中的文件复制到主机,但它现在可以反过来了:docker cp foo.txt mycontainer:/foo.txt

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