Dockerfile中的交互式命令

时间:2016-11-28 22:15:16

标签: docker dockerfile

我正在尝试使用docker build命令和适当的Dockerfile自动创建开发Docker镜像。我需要在RUN命令中运行的其中一个脚本希望用户单击并阅读其许可协议。因此有两个问题:

  1. RUN中所有Dockerfile命令的输出在哪里?
  2. 可以与上述命令进行交互的解决方案是什么?现在,docker build命令卡住了,要求用户输入无限循环。

3 个答案:

答案 0 :(得分:3)

RUN命令的输出在构建期间显示在终端中。 Docker构建过程完全是非交互式的,所以你必须找到一些方法来自动接受这些术语(几乎所有软件都允许这样做,想想apt-get install -y...)或者使用一些shell魔法来回应接受过程或其他什么(Expect可能?)。

答案 1 :(得分:2)

您可以使用技术here

(echo "initial command" && cat) | some_tool

或者,如果多个阶段使用printf并与\n连接:

(printf "cmd1\ncmd2" && cat) | some_tool

答案 2 :(得分:1)

您也可以通过几个步骤完成此操作,从带有说明的Dockerfile开始,直到交互式部分之前。然后

docker build -t image1 .

现在只是

docker run -it --name image2 image1 /bin/bash

你有一个shell,你可以做你的交互式命令,然后执行类似

的操作

docker commit image2 myuser/myimage:2.1

docker commit

的文档

https://docs.docker.com/engine/reference/commandline/commit/

您可能需要指定新的CMD或ENTRYPOINT,如文档

中所述

使用新的CMD和EXPOSE指令提交容器

例如,使用wine的一些docker图像分几步完成,安装wine,然后启动并配置在wine中启动的软件,然后docker commit