【问题标题】:Is there a way to add a prompt during the docker build process?有没有办法在 docker 构建过程中添加提示?
【发布时间】:2015-06-08 13:47:19
【问题描述】:

我正在使用 Docker 创建一个带有 SSL 的特定 nginx 容器。

但我不希望我的 SSL 文件按原样保存在我的版本控制系统中。因此它们是加密的。在构建 docker 容器时,我需要密码来解密文件并测试我的 nginx 配置。

我正在使用read 在我的安装脚本中获得提示,但 Docker 只是在提示时停止:

 + echo 'Please enter the password for the SSL certificates: '
 + read -s SSL_PASSWORD
INFO[0008] The command [/bin/sh -c /build/setup.sh && /build/cleanup.sh] returned a non-zero code: 1

在执行docker build 时有什么方法可以得到提示吗?

感谢您的帮助:)

【问题讨论】:

  • expect 等工具可能会有所帮助,请参阅expect.sourceforge.net
  • @user2915097 好吧,如果我对expect 的理解正确,它会保存您执行的操作并“重新播放”它们。但是,我不想将我的密码放入任何脚本中,否则加密将完全没用。 必须通过提示。
  • 我的错,我说的对autoexpect 是正确的。但问题是我的docker build 在虚拟机(boot2docker)中运行,所以我不知道我想要做的事情是否可能。
  • 我认为您必须在运行时执行此操作,或者通过将由脚本处理的环境变量传递给执行一些初始化操作,或者将docker exec 传递到容器中并手动执行。我想你也可以手动完成,然后 docker commit 图像。

标签: shell docker prompt


【解决方案1】:

好吧,在四处搜索之后,没有办法在docker build 期间出现提示。它被设计成完全自动化的。

然后我会在docker run 期间执行此步骤。

感谢 IRC #docker 组的某个 larskshttps://github.com/GoogleCloudPlatform/kubernetes/issues/2030 上有一篇关于这些问题的有趣文章

【讨论】:

    【解决方案2】:

    使用expect 命令就像从命令行执行一样。 COPY 期待来自 docker 主机的脚本并运行它。

    【讨论】:

    • 这可以工作,但如果它是关于密码和您不想在脚本中包含的其他敏感数据,它并不能真正解决问题(参见已经建议的初始 cmets expectautoexpect)。您仍然必须将密码放入脚本中,这是一个坏主意。但在某些情况下它可能有用...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多