2014-10-28 132 views
37

我在主機上創建了幾個不同的目錄,因爲我試圖瞭解Docker只是爲了讓我的dockerfiles保持有組織。我剛剛運行的Dockerfile如下所示:爲Docker鏡像構建上下文非常大

FROM crystal/centos 
MAINTAINER crystal 

ADD ./rpms/test.rpm ./rpms/ 
RUN yum -y --nogpgcheck localinstall /rpms/test.rpm 

我的實際rpm只有1 GB。但是當我嘗試執行sudo docker build -t="crystal/test" .時,我得到構建上下文到Docker守護進程3.5 GB。當你繼續構建Docker鏡像時,還有什麼我不知道的嗎?當我在主機上的其他目錄中創建更多圖像時,我的內存是否積累?

回答

91

Docker客戶端將整個「構建上下文」發送到Docker守護進程。構建上下文(默認情況下)是Dockerfile所在的整個目錄(因此,整個rpms樹)。

您可以設置一個.dockerignore文件讓Docker忽略某些文件。你可能想試驗它。

或者,您可以將您的rpms文件夾移動到您的Dockerfile以上的一個目錄級別,並且只將符號鏈接test.rpm移動到Dockerfile的目錄中。

+2

遺憾的是,似乎符號鏈接是不可能在這種情況下,因爲'給ADD '命令不會在構建過程中遵循sym鏈接。請參閱:https://github.com/docker/docker/issues/1676 – JimmidyJoo 2016-04-12 15:51:36

+2

'.dockerignore'非常適合我! 10x – ItayB 2016-05-05 05:41:18

+0

救生員! Rails開發人員:確保將'tmp''log'添加到'.dockerignore' +其他自定義的 – equivalent8 2016-07-07 13:01:25

8

我通過將我的Dockerfile和docker-compose.yml移動到一個子文件夾中來修復它,它工作得很好。顯然,碼頭工人將當前文件夾發送到守護程序,我的文件夾是9演出。

1

在我的情況,當時我用錯了-f參數執行 - 沒有目錄的路徑,其中位於Dockerfile

docker build --no-cache -t nginx5 -f /home/DF/Dockerfile /home/DF/ - 右

docker build --no-cache -t nginx5 -f /home/DF/Dockerfile - 錯

0

我有同樣的問題,因爲自由泳選手。然而,我從一個目錄中建立一個從我的上下文。所以-f參數是正確的,上下文是不正確的。從泊塢窗-DIR

project 
| 
-------docker-dir 

樓以下是罰款

docker build -t br_base:0.1 . 

大廈從碼頭-dir中構建情境改變。因此我需要更改命令中的上下文。上下文由'。'給出。在上面的命令中。

的從項目目錄的新的命令應該在這裏

docker build -t br_base:0.1 ./base 

上下文由「./base」

相關問題