使用撰写命令构build嵌套泊坞窗图像

我正在用docker工合成一盏灯。

在我的docker-compose.yml中,我有以下几点:

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

webserver-base是从ubuntu-base映像派生的。 在基于web服务器的Dockerfile中:

 FROM docker_ubuntu-base 

Ubuntu的基础是build立

 FROM ubuntu:14.04 

现在,如果我执行docker-compose.yml,它不会构build基于ubuntu的映像,但是它将尝试构build基于webserver的映像并失败,因为它找不到基于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 

这一切工作,如果我先build立基于Ubuntu的图像手动。

为什么它不构build基于Ubuntu的图像?

可悲的是,构buildsorting是docker-compose中的一个缺失function​​,现在需要多个月。

作为解决方法,您可以像这样链接容器:

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

这样,ubuntu-base在webserver-base之前就已经build成了。

先做一个

 docker-compose build ubuntu-base 

但是这不会在本地创build镜像docker_ubuntu-base,因为您没有任何构build步骤。 只有docker.io/ubuntu:14.04将被下载。

如果您添加一个构build步骤,如:

 FROM ubuntu:14.04 RUN date 

docker_ubuntu-base图像将被创build。

所以先做一个:

 docker-compose build ubuntu-base 

这将创build图像docker_ubuntu-base。 然后你可以做一个docker-compose build

但我会build议反对这个嵌套泊坞窗的图像构造。 这很麻烦,因为@kev表示你不能控制构build的顺序。 你为什么不创build两个独立的docker文件? 让docker通过保持Dockerfile指令尽可能相同并重用这些图层,从ubuntu-base派生webserver-base。