是否可以在多级dockerfile中跳过FROM命令?

时间:2017-09-15 16:38:13

标签: docker dockerfile

尝试制作动态泊坞窗文件,其中最终图像可能需要基于用户输入的两个先前图像中的一个。

4 个答案:

答案 0 :(得分:2)

我认为你不能跳过FROM命令。构建应该从某个地方开始,即使它是scratch

在尝试创建动态dockerfile时,可以使用shell脚本创建dockerfile。我在parity-deploy.sh遇到了一个这样的脚本,它根据用户提供的配置动态创建docker-compose.yml文件。

答案 1 :(得分:1)

Dockerfiles能够使用ARGs允许在使用CLI参数--build-arg的docker构建期间传递参数一段时间。但是直到最近(准确地说,是Docker的17.05版本),您仍无法使用ARG来指定Dockerfile的强制性FROM命令的全部或部分。

但是,由于合并了拉取请求Allow ARG in FROM,因此您现在可以指定要在运行时使用的映像/存储库。这非常灵活,例如,我使用此功能允许我在生产环境中构建Dockerfile时从私有Docker注册表中提取信息,或者从作为CI /一部分创建的本地Docker镜像中进行构建。 Travis CI内的测试过程。

要在ARG发件人中使用Dockerfile's,请执行以下操作:

ARG MYAPP_IMAGE=myorg/myapp:latest
FROM $MYAPP_IMAGE
...

然后,如果您想使用其他image/tag,则可以在运行时提供它:

docker build -t container_tag --build-arg MYAPP_IMAGE=localimage:latest .

如果您未指定--build-arg,则Docker将使用ARG中的默认值。

通常,最好在Dockerfile本身中设置FROM值-但是在许多情况下(例如CI测试),可以证明使其成为运行时参数是合理的。

答案 2 :(得分:0)

根据documentation,你不能跳过它。它应该是Dockerfile中的第一个命令。

  

因此,有效的Dockerfile必须以FROM指令

开头

但请注意:

  

FROM可以在单个Dockerfile中多次出现以创建多个图像,或者使用一个构建阶段作为另一个构建阶段的依赖项。

您可以动态编辑文件(例如sed)以使用用户指定的图像/图像。

答案 3 :(得分:0)

现在看起来像docker支持:https://github.com/docker/cli/issues/1134