2015-04-29 73 views
6

我正在嘗試將一組文件從docker主機複製到容器。 在直接進入/ var/lib/docker/aufs/...的AUFS系統上工作。 但是我是Fedora的另一個系統,它使用devicemapper作爲存儲驅動程序。 在這個系統上,如果我這樣做:Docker將文件從主機複製到容器

[[email protected] tmp]# docker inspect -f '{{.Id}}' 393ef4b9f485 
393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24 
[[email protected] tmp]# cd /var/lib/docker/devicemapper/mnt/393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24 
[[email protected] 393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24]# ls -l 
total 0 
[[email protected] 393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24]# 

我什麼也沒得到。 我試過從Copying files from host to Docker container的所有建議

使用焦油似乎是偉大的,而不是直接去底層的FS。但我不能認爲焦油會出現在所有容器中。

如果是相關的,我甚至試圖創建容器中的文件,但它,然後做了一個發現。 -name在/ var/lib/docker/devicemapper/mnt中無效。

任何提示?

EDIT 1:基於其中一個答案 ,加入這些約束。 目的是將文件複製到沒有。不修改容器構建(Dockerfile),b。不要安裝任何ssh或ftp守護進程。和c。甚至不改變容器的啓動方式。

EDIT 2:將泊塢窗信息 :

# docker info 
Containers: 1 
Images: 21 
Storage Driver: devicemapper 
Pool Name: docker-253:0-397467-pool 
Pool Blocksize: 65.54 kB 
Backing Filesystem: extfs 
Data file: 
Metadata file: 
Data Space Used: 4.261 GB 
Data Space Total: 107.4 GB 
Data Space Available: 103.1 GB 
Metadata Space Used: 3.596 MB 
Metadata Space Total: 2.147 GB 
Metadata Space Available: 2.144 GB 
Udev Sync Supported: true 
Library Version: 1.02.90 (2014-09-01) 
Execution Driver: native-0.2 
Kernel Version: 3.17.4-301.fc21.x86_64 
Operating System: Fedora 21 (Twenty One) 
CPUs: 4 
Total Memory: 3.86 GiB 
Name: fedora-docker 

泊塢版本是1.6.0和集裝箱圖像是基於RHEL。

+1

爲什麼你需要這樣做?沒有官方支持的解決方案,所以任何答案總是會成爲黑客 - 但如果你告訴我們爲什麼你需要這個解決方案,或許我們可以想出一些東西。 –

+0

一致認爲,沒有官方的支持,實際上Docker 1.7應該得到這個改變,https://github.com/docker/docker/pull/10198,但是對於我的用例,我需要在內部做一些檢查已經在運行容器,爲此我需要推入一些腳本和文件並獲取它們的輸出。沒有「干擾」/重建容器。 –

+0

如果你可以假設腳本會運行,我想你可以假設至少有貓存在,並且可能是焦油。如果您無法將此腳本添加到圖像中,則可以在運行時將其作爲卷裝入。 –

回答

9

UPDATE: 現在泊塢窗cp命令行命令是雙向的。 見docker cp文檔

使用

泊塢窗CP [選項]容器:SRC_PATH DEST_PATH | -

泊塢窗CP [OPTIONS] SRC_PATH | - CONTAINER:DEST_PATH

== =====原來的答案==============

研究發現,ACR工作的最簡單的方法OSS存儲驅動程序:

cd /proc/`docker inspect --format "{{.State.Pid}}" <containerid>`/root 

有與Devicemapper與AUFS測試了在Fedora的存儲驅動程序 並在Ubuntu作爲存儲驅動程序。 適用於這兩種情況。

+0

在Ubuntu 14.04和docker 1.6.2上工作就像一個魅力(我會在不知不覺中及時添加*)。 – hauron

0

這個答案爲您提供複製不同的看法。

1>用這種方式只要你知道集裝箱的IP。如果您的目標只是將文件從主機系統中取出並放入容器中,則可以採用不同的方式進行操作。文件傳輸協議是一種更簡單的方法。您可以在Docker容器上設置SSH服務器(sshd),並使用scp或任何其他文件傳輸工具來執行此操作。

2>通過使用此命令docker run -ti -v /host-path-of-directory-having-files/:/target-path-in-container/:rw image-name bash卷共享文件。您可以參考以下鏈接https://docs.docker.com/userguide/dockervolumes/

+0

請參閱對問題的編輯,我無法更改容器的啓動方式或在容器中安裝新軟件。 –

+0

哪個圖像ru在docker中使用?哪些docker基本映像OS,主機OS ru使用? –

+0

Docker鏡像基於RHEL,Host OS Fedora 21版,Docker 1.6.0版和Docker Info指出存儲驅動程序是devicemapper。查看完整的碼頭信息並對該問題進行編輯。 –

相關問題