1. 程式人生 > >詳解在Docker容器內外互相拷貝資料的方法

詳解在Docker容器內外互相拷貝資料的方法

http://blog.csdn.net/yangzhenping/article/details/43667785

如何在Docker容器內外互相拷貝資料?

從容器內拷貝檔案到主機上

  1. docker cp <containerId>:/file/path/within/container /host/path/target  

從主機上拷貝檔案到容器內


參考自:


1.用-v掛載主機資料捲到容器內(需要你docker run 建立容器的時候,就需要指定掛載的目錄)

  1. docker run -v /path/to/hostdir:/mnt $container(image name or image id) 
  2. 在容器內拷貝  
  3. cp /mnt/sourcefile /path/to/destfile  

2.直接在主機上拷貝到容器物理儲存系統


A. 獲取容器名稱或者id :

  1. $ docker ps  

B. 獲取整個容器的id

  1. $ docker inspect -f   '{{.Id}}'  步驟A獲取的名稱或者id  

C. 在主機上拷貝檔案:

  1. $ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE   
  2. 或者  
  3. $ sudo cp path-file-host /var/lib/docker/devicemapper/mnt/123abc<<id>>/rootfs/root  

例子:

  1. $ docker ps  
  2. CONTAINER ID      IMAGE    COMMAND       CREATED      STATUS       PORTS        NAMES  
  3. d8e703d7e303   solidleon/ssh:latest      /usr/sbin/sshd -D                      cranky_pare  
  4. $ docker inspect -f   '{{.Id}}' cranky_pare  
  5. or   
  6. $ docker inspect -f   '{{.Id}}' d8e703d7e303  
  7. d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5  
  8. $ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5  

3.用輸入輸出符

  1. docker run -i ubuntu /bin/bash -c 'cat > /path/to/container/file' < /path/to/host/file/  


或者

  1. docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/

docker可以支援把一個宿主機上的目錄掛載到映象裡。

docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash

通過-v引數,冒號前為宿主機目錄,必須為絕對路徑,冒號後為映象內掛載的路徑。

現在映象內就可以共享宿主機裡的檔案了。

預設掛載的路徑許可權為讀寫。如果指定為只讀可以用:ro

docker run -it -v /home/dock/Downloads:/usr/Downloads:ro ubuntu64 /bin/bash