我正在尝试使用docker build
命令和适当的Dockerfile
自动创建开发Docker镜像。我需要在RUN
命令中运行的其中一个脚本希望用户单击并阅读其许可协议。因此有两个问题:
RUN
中所有Dockerfile
命令的输出在哪里?docker build
命令卡住了,要求用户输入无限循环。答案 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