詳解在Docker容器內外互相拷貝資料的方法
阿新 • • 發佈:2019-01-09
http://blog.csdn.net/yangzhenping/article/details/43667785
如何在Docker容器內外互相拷貝資料?
從容器內拷貝檔案到主機上
- docker cp <containerId>:/file/path/within/container /host/path/target
從主機上拷貝檔案到容器內
參考自:
1.用-v掛載主機資料捲到容器內(需要你docker run 建立容器的時候,就需要指定掛載的目錄)
- docker run -v /path/to/hostdir:/mnt $container(image name or image id)
- 在容器內拷貝
- cp /mnt/sourcefile /path/to/destfile
2.直接在主機上拷貝到容器物理儲存系統
A. 獲取容器名稱或者id :
- $ docker ps
B. 獲取整個容器的id
- $ docker inspect -f '{{.Id}}' 步驟A獲取的名稱或者id
C. 在主機上拷貝檔案:
- $ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE
- 或者
- $ sudo cp path-file-host /var/lib/docker/devicemapper/mnt/123abc<<id>>/rootfs/root
例子:
- $ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- d8e703d7e303 solidleon/ssh:latest /usr/sbin/sshd -D cranky_pare
- $ docker inspect -f '{{.Id}}' cranky_pare
- or
- $ docker inspect -f '{{.Id}}' d8e703d7e303
- d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5
- $ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5
3.用輸入輸出符
- docker run -i ubuntu /bin/bash -c 'cat > /path/to/container/file' < /path/to/host/file/
或者
- 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