尝试制作动态泊坞窗文件,其中最终图像可能需要基于用户输入的两个先前图像中的一个。
答案 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