Dockerfile 中添加交互式命令

Dockerfile 中添加交互式命令

一个有趣的问题,需要在 Dockerfile 里面添加交互式的命令,类似于我们平时安装软件的时候输入 yes,我们可以通过 yum install -y 来默认安装,避免用户输入,但是有的时候没办法避免的时候,一定需要输入交互命令的时候应该咋办呢?能想到的一个比较好的办法是暂时在 Dockerfile 中不添加这条交互式命令,先制作一个镜像,然后使用这个镜像运行一个容器,然后到容器中去运行这个交互式命令,然后配置完后 commit 下这个容器成一个新的镜像即可。

但是上面这种方式不具有通用性,在 docker 官方论坛中有关于这个问题的解答:https://forums.docker.com/t/dockerfile-how-to-answer-install-question-from-application/5240/2 通过安装 expect 工具来实现交互功能:

1
2
3
RUN apt-get install expect
ADD install_script
RUN install_script

安装脚本如下:

1
2
3
4
5
6
#!/usr/bin/expect
set timeout 2
spawn "./your_script"
expect “Question 1 :” { send “yes\n” }
expect “Question 2 :” { send “no\n” }
interact