【问题标题】:Read input of shell script in Docker container读取 Docker 容器中 shell 脚本的输入
【发布时间】:2020-06-17 00:51:16
【问题描述】:

我有一个简单的 shell 脚本的 docker 镜像。 shell 脚本只包含 1 个方法。并且该方法期望用户输入。然后将用户提供的结果显示到屏幕上。

#!/bin/bash

executeScript() {
    echo "this is a shel script";
    read -p 'Enter value: ' value;
    echo $value;
}

executeScript

现在我有我的 docker 文件了

FROM ubuntu
ADD example.sh /opt/example.sh
RUN /opt/example.sh

现在我使用docker build -t example-image .创建了图像
图像已创建。 现在我需要执行容器。 在执行容器时,我希望 shell 脚本等待用户输入 我该如何实现?

如果我执行 docker run -it --name example-container example-image:latest 我没有得到实际输出

如果我只执行没有 docker 的 shell 脚本,预期的输出应该是这样的

如何运行容器,以便获得附加图像等输出

【问题讨论】:

标签: docker sh


【解决方案1】:

按照给定的步骤。

Dockerfile

FROM ubuntu
WORKDIR /opt
COPY example.sh .
CMD ["sh", "example.sh"]

构建

$ docker build -t input .

运行

$ docker run -it input
this is a shel script
Enter value: 3
3

【讨论】:

  • 在我的 Dockerfile 中,我已经在 CMD 中有字符串,例如 CMD ["abc"] 是否允许在 CMD 中传递任意数量的参数?例如 CMD ["abc","sh", "example. sh"] ??
【解决方案2】:

您的问题是在 Dockerfile 中使用 RUN - 它会在创建映像期间执行脚本(不接受输入 - 所以它会立即返回)。相反,您应该在启动容器时使用CMDENTRYPOINT 更改可执行文件:

FROM ubuntu
ADD example.sh /opt/example.sh

CMD /opt/example.sh

【讨论】:

    猜你喜欢
    • 2022-10-20
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多