Dockerfile中的交互式命令
我正在尝试使用Dockerfile中的交互式命令,docker,dockerfile,Docker,Dockerfile,我正在尝试使用Docker build命令和适当的Dockerfile自动创建开发Docker映像。我需要在run命令中运行的一个脚本希望用户点击并阅读他们的许可协议。因此,有两个问题: 其中是Dockerfile中所有RUN命令的输出 什么解决方案可以与上述命令交互?现在,docker build命令在无限循环中向用户请求输入时卡住了 生成期间,RUN命令的输出显示在终端中。Docker构建过程是完全非交互式的,因此您必须找到某种方式来自动接受条款(几乎每一个软件都允许这样做,想想apt ge
Docker build
命令和适当的Dockerfile
自动创建开发Docker映像。我需要在run
命令中运行的一个脚本希望用户点击并阅读他们的许可协议。因此,有两个问题:
Dockerfile
中所有RUN
命令的输出docker build
命令在无限循环中向用户请求输入时卡住了生成期间,
RUN
命令的输出显示在终端中。Docker构建过程是完全非交互式的,因此您必须找到某种方式来自动接受条款(几乎每一个软件都允许这样做,想想apt get install-y…
),或者使用一些shell向导将接受回复到过程或其他任何东西(可能?)。您也可以通过几个步骤来完成,从带有说明的Dockerfile开始,直到交互部分之前。然后
docker build-t image1.
现在
docker run-it--name image2 image1/bin/bash
你有一个外壳在里面,你可以做你的交互命令,然后做类似的事情
docker提交image2 myuser/myimage:2.1
docker提交的文档
您可能需要指定新的CMD或ENTRYPOINT,如文档中所述
使用新CMD提交容器并公开指令
例如,一些使用wine的docker映像分几个步骤进行操作,安装wine,然后启动并配置wine中启动的软件,然后docker提交
您可以使用以下技术:
或者,如果多个阶段使用printf
和concat with\n
:
(printf "cmd1\ncmd2" && cat) | some_tool
是的,对于
apt get
类型的应用程序,我确实使用了-y
。但这是一些商业的东西。是的,商业的东西通常都很糟糕;)但如果他们没有非交互模式,我会感到惊讶:)如果没有,那么看看Expect。我也有类似的问题。在构建映像时,我正在docker中安装conda(基于arm的映像目前不可用)。代码看起来像运行bash Anaconda3-2021.04-Linux-aarch64.sh,这就是问题所在,因为它需要输入多次yes。任何关于如何处理的建议。是否有关于如何在dockerfile中使用expect的链接?正如johnharris85所说,使用ExpectCome在这里寻找关于如何在正在进行的dockerfile中交互重新运行命令的答案(echo“Password”和&cat)| sudo ls
不起作用,我把sudo作为交互工具的一个常见示例。@Atomosk许多基于控制台的程序,如sudo
不从stdin读取密码等敏感数据,而是更直接地从终端读取。您可以使用-S
使sudo
从stdin中读取。@creativecoding我知道关于-S的内容,这就是为什么我说sudo
只是一个常见的例子。每个人都可以测试并看到echo
对您没有帮助。
(printf "cmd1\ncmd2" && cat) | some_tool