2017-06-13 30 views
0

我想組裝一些圖像,並將其與我的dockerfile一起存儲。我對COPY或ADD的期望是合併行爲。但是,如果使用這些指令,則會覆蓋文件層次結構。因此,如果父路徑中的文件位於路徑中,則它們不再可用。 (巨大的問題舉例來說如果我是爲了節省的/ etc/mycoolstuff/filehere一些文件)ADD和COPY合併一個目錄的內容和已經生成的目錄的內容

發生這種情況時,我無法使用apt-get更多

我也看到了一些建議轉換我文件打包成tar,但沒有觀察到任何不同。

爲了清楚起見,這是問題之一(建立,如果我更改順序,但它結束反正壞的原因孩子的圖像將無法使用apt再):

ADD  build/image-base.tgz/
RUN  apt-get clean -y && \ 
      apt-get update && \ 
      apt-get install unzip -y --no-install-recommends && \ 
      apt-get install gosu -y --no-install-recommends && \ 
      apt-get clean -y && \ 
      apt-get autoclean -y && \ 
      apt-get autoremove -y && \ 
      rm -rf /var/lib/apt/lists/* 

Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial/InRelease Temporary failure resolving 'archive.ubuntu.com' 
Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-updates/InRelease Temporary failure resolving 'archive.ubuntu.com' 
Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-backports/InRelease Temporary failure resolving 'archive.ubuntu.com' 
Failed to fetch http://security.ubuntu.com/ubuntu/dists/xenial-security/InRelease Temporary failure resolving 'security.ubuntu.com' 
Failed to fetch http://ppa.launchpad.net/webupd8team/java/ubuntu/dists/xenial/InRelease 
Temporary failure resolving 'ppa.launchpad.net' 
Some index files failed to download. They have been ignored, or old ones used instead. 
+0

你可以發佈你執行的命令嗎? – German

+0

最後一個是:ADD \t build/image-base.tgz/ – Victor

+0

那裏,我有一個簡單的文件結構與tomcat8配置:etc/tomcat8/catalina.properties例如 – Victor

回答

1

一些挖我能找到複製的解決方法後一個RUN來實現我一直在尋找的行爲。

COPY build/image-base.tgz/

RUN  tar -xvf image-base.tgz --no-overwrite-dir 

不幸的是,這會創建一個新圖層,並且基準焦油將保持在那裏。如果它只是一些文本配置文件,這不是一個問題。

解決COPY指令的一個奇怪的方法是使用wget,然後解壓縮,這樣我們就可以刪除tar文件。如果我們在一個構建環境中存儲構件併爲它們創建URL,那麼wget會做到這一點......在這種情況下,我們只需要一個RUN,保持房子乾淨。

3

你是什麼試圖實現?你真的想覆蓋根目錄嗎?那麼你最好從建立圖像。要做到這一點,你Dockerfile必須FROM scratch

關於這個問題的官方泊塢教程開始,與多個發行版腳本:

https://docs.docker.com/engine/userguide/eng-image/baseimages/

+0

這是一個很好的提示。我檢查了它並提出了投票。但這實際上並不是我正在尋找的,因爲我「真的」想從根目錄覆蓋。一個小細節證明,這不是我所期待的:介詞 - 我試圖覆蓋而不是「目錄」。合併行爲是非常可取的,實際上github上有一個很大的討論 - 我爲後者提供資金。 – Victor

+0

合併將創建另一個圖層,使圖像更大......您可以在'docker build'之前在.tgz中進行合併,並從「scratch」構建圖像。 –

+0

表示同意,但僅僅因爲幾個字節的配置文件,構建一個可能是有問題的映像是不值得的。我將不得不去檢查作者在原始作品上做了什麼並錯過了更新。如果我用發行版作爲基礎從頭開始打包我自己的軟件,這將是一件好事,但我試圖擴展另一個像搖滾和其他兩個官方軟件一樣穩定的圖像。無論如何,我們正在討論兩種不同的解決方案不同的問題。 – Victor