2015-12-21 108 views
2

我正在用碼頭構成一盞燈。訂購構建嵌套泊塢窗圖像與撰寫

以我搬運工-compose.yml我有以下:

ubuntu-base: 
    build: ./ubuntu-base 

webserver-base: 
    build: ./webserver-base 

網絡服務器基從Ubuntu的基本圖像的。 在網絡服務器基Dockerfile:

FROM docker_ubuntu-base 

Ubuntu的基礎是建立

FROM ubuntu:14.04 

現在,如果我執行泊塢窗,compose.yml,它不建立Ubuntu的基本圖像,但其試圖構建基於web服務器的映像並失敗,因爲它找不到基於ubuntu的映像。

輸出:

$ docker-compose up -d 
Building webserver-base 
Step 1 : FROM docker_ubuntu-base 
Pulling repository docker.io/library/docker_ubuntu-base 
ERROR: Service 'webserver-base' failed to build: Error: image library/docker_ubuntu-base:latest not found 

這一切,如果我建立Ubuntu的基本圖像手動第一作品。

爲什麼不構建基於ubuntu的映像?

回答

6

不幸的是,構建排序是docker-compose中的一個缺失功能​​,現在需要多個月。

至於解決方法,你可以鏈接容器是這樣的:

ubuntu-base: 
    build: ./ubuntu-base 

webserver-base: 
    build: ./webserver-base 
    links: 
     - ubuntu-base 

這樣Ubuntu的基礎得到Web服務器之前,基地建。

+0

嗨,謝謝你的提示。今天是2016年,你有沒有找到更好的方法? – woto

+0

更新了我的答案 – cari

+0

嗯,可能由於我被誤解了,但depends_on不會影響構建順序。我會稍後再嘗試,在這個功能中仍然很有趣。 – woto

2

首先做一個

docker-compose build ubuntu-base 

但是因爲你沒有任何構建步驟,這將不會在本地創建的圖像docker_ubuntu基。只有docker.io/ubuntu:14.04將被下載。

如果添加了構建步驟,如:

FROM ubuntu:14.04 
RUN date 

一個docker_ubuntu基圖像將被創建。

所以首先做一個:

docker-compose build ubuntu-base 

這將創建圖像docker_ubuntu基。然後你可以做一個docker-compose build

但我會建議反對這個嵌套泊塢窗圖像構造。這很麻煩,因爲@kev表示您無法控制構建的順序。你爲什麼不創建兩個獨立的docker文件?讓docker通過保持Dockerfile指令儘可能相同並重用這些圖層來從ubuntu-base派生webserver-base。

+0

thx爲您的努力,但我已經找到了答案我自己。 – cari