首页 > 解决方案 > 在构建期间将参数传递给通过 Dockerfile 运行的脚本

问题描述

我有一个脚本或“控制台”,它在我的 docker 构建期间通过我的 Dockerfile 启动。当它运行时,它运行良好并打开它的交互式提示。我的问题是,我似乎无法将命令传递到该交互式提示中。

这是我的 dockerfile 中重要的部分:

    RUN ./iiq console
    RUN import init.xml
    RUN quit

我希望看到来自 init.xml 的依赖项被引入,但我得到了:

Step 24/26 : RUN ./iiq console
 ---> Running in d1bf75e69674
Setting iiq.hostname to d1bf75e69674-console
> Removing intermediate container d1bf75e69674
 ---> 3832361dee0e
Step 25/26 : RUN import init.xml
 ---> Running in 8a3cd63c7789
/bin/sh: import: command not found

步骤中的大于号是打开此控制台并等待输入,我只是不确定如何正确发送它。我可以在没有此步骤的情况下构建我的容器并手动完成,因此它可以这样工作。

标签: dockerdockerfile

解决方案


Docker 构建过程是完全非交互式的。

Dockerfile 中的交互式命令

但我以不同的方式执行此操作,您可以在您的脚本中尝试此操作。

测试参数.sh

#!/bin/ash

echo "Arg is $1"

这是我的 Dockerfile

FROM alpine
copy testargs.sh /testargs.sh
RUN chmod +x /testargs.sh
ARG arg1
RUN ./testargs.sh $arg1

现在构建上面的 dockerfile。

docker build --no-cache --build-arg arg1=testingarg1 -t test .

如您所见,它不是交互式的,但至少它接受动态参数。

在此处输入图像描述


推荐阅读