使用撰写命令构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。