2015-12-21 50 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