簡體   English   中英

docker cp不會將文件復制到容器中

[英]`docker cp` doesn't copy file into container

我有一個碼頭化項目。 我進行構建,將文件從主機系統復制到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:/#

因此,圖像和容器的名稱有些混淆。 顯然,與運行命令所提起的cp操作所作用的容器不同。 無論如何,正確的程序是:

# 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 exec進入您的容器,您的命令創建了一個新容器。

我有這個別名可以使用容器的外殼進入最后創建的容器

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

您正在使用哪個docker版本? 按照Docker 1.8 cp支持從主機復制到容器:

•將文件從主機復制到容器:docker cp過去僅用於將文件從容器復制到主機,但現在反過來又起作用:docker cp foo.txt mycontainer:/foo.txt

請注意圖像和容器之間的區別。 如果您希望從該Dockerfile創建的每個容器都包含該文件(即使您以后不復制),也可以在Dockerfile中使用COPY和ADD。 如果要在從映像創建容器之后復制文件則可以使用1.8版中的docker cp命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM