2017-07-04 36 views
-1

首先,我對Docker本身及其結構缺乏瞭解。我知道,首先要學習基礎知識會更有益,但我確實需要這樣做才能繼續前進到其他方面。將在Dockerfile中下載的文件移動到硬盤

因此,在我安裝的Dockerfile中,使用wget &從網站下載文件,認證&下載成功。然而,當我後來嘗試移動所述文件時,找不到它,並且它不顯示使用例如資源管理器(路徑被指定) 我認爲它可能與運行有關&它如何執行wget命令;我讀過Id可以用來將它複製到硬盤上,但是我怎麼在Dockerfile中做到這一點?

RUN wget -P ./path/to/somewhere http://something.com/file.txt --username xyz --password bluh 

ADD ./path/to/somewhere/file.txt /mainDirectory 

下載顯示&登錄成功,但正如我所說,我使用的文件以後,因爲它是不被位於硬盤有問題。可能是一個基本的錯誤,但我真的很感激可能導致解決方案的一些輸入。

很顯然,當試圖執行ADD時會產生錯誤,因爲沒有要移動的文件。我試圖找到一種方法來裝入捲來存儲它,但迄今爲止徒勞無功。

編輯: 儘管問題與「移動到硬盤」類似,但我正在尋找方法來獲取在Dockerfile中創建的容器的ID以移動它;而線程提供了這樣的答案,我沒有在Dockerfile中使用它們。

+0

[Docker - 從容器複製文件到主機]的可能重複(https://stackoverflow.com/questions/22049212/docker-copy-file-from-container-to-host) – dimo414

+0

我意識到,這就是爲什麼我我在問如何移動它們;我知道這是可能的使用CP,但我還沒有能夠找到使用的容器的ID尚未。 – AscendedKitten

+0

您是否試圖在Docker容器內或主機上使用該文件? – jdno

回答

2

簡而言之,這是不可能的。

Dockerfile 構建圖像,您可以將其作爲短期容器run。在構建過程中,您沒有(寫入)主機及其文件系統的訪問權限。哪一種有道理,因爲你想構建一個不可變的鏡像,從中運行臨時容器。

你可以做的是一個容器,並從你的主機掛載一條路徑作爲volume到容器中。這是如何在主機和容器之間共享文件的唯一方式。

下面是一個例子,你可以如何與sherylynn/wget像這樣做:

docker run -v /path/on/host:/path/in/container sherylynn/wget wget -O /path/in/container/file http://my.url.com 

-v HOST:CONTAINER參數允許您指定安裝在容器內,在指定的位置在主機上的路徑。

對於wget,在下載單個文件時,我更喜歡-O而不是-P,因爲它使得它在下載結束時顯得非常明確。當您將-O指向卷的位置時,下載的文件將結束於主機系統上(位於您安裝的文件夾中)。

因爲我不知道你的圖片或你的環境是什麼樣子,所以你可能需要調整一兩件事情來適應你自己的圖片。作爲一般建議:對於像wgetcurl這樣的基本命令,您可以在Docker Hub上找到預製圖像。當您需要設置連續集成管線左右,您想要使用wgetcurl但無法直接執行的情況時,這可能非常有用。

+0

非常感謝!可悲的是我不能改變環境,因爲這是我得到的任務,但嘗試命令導致「非法選項」錯誤,然後返回非零代碼2.我假設我仍然可以使用參數,如--auth對認證沒有挑戰? – AscendedKitten

+1

是的,這是您在Docker中捆綁/分發的普通ol'wget'。您可以使用'docker run sherylynn/wget wget --help'來查看所有可用選項的列表(應該與您當地的完全相同)。 – jdno

+0

這同樣適用於Dockerfile嗎?我想我不得不使用'VOLUME',但它是否允許相同的功能? – AscendedKitten

0

使用wget -O,而不是-P特定的文件下載

用於例如,

運行的wget -O /tmp/new_file.txt http://something.com --username XYZ --password bluh/new_file.txt

謝謝

+0

感謝您的回答,儘管它似乎並沒有改變虛擬機「關閉」後文件已經消失的事實。 – AscendedKitten

相關問題