Dockerfile中的交互式命令

ily*_*725 12 docker dockerfile

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

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

use*_*097 14

您也可以分几个步骤来完成,从带有说明的 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


joh*_*s85 5

RUN在构建过程中,命令的输出显示在您的终端中。Docker构建过程是完全非交互的,因此您必须找到某种方式来自动接受条款(几乎每个软件都允许这样做apt-get install -y...),或者使用一些shell向导将接受回显到过程或其他方式(期待也许?)。

  • 是的,商业事物通常真的很糟糕;)但是如果它们没有非交互模式,我会感到惊讶:)如果没有,那就去看Expect。 (3认同)

nik*_*apa 5

您可以在这里使用该技术:

(echo "initial command" && cat) | some_tool
Run Code Online (Sandbox Code Playgroud)

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

(printf "cmd1\ncmd2" && cat) | some_tool
Run Code Online (Sandbox Code Playgroud)