Прочитать ввод сценария оболочки в контейнере Docker - PullRequest
0 голосов
/ 16 июня 2020

У меня есть изображение docker простого сценария оболочки. Сценарий оболочки просто содержит 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 .
Изображение создано. Теперь мне нужно выполнить контейнер. при выполнении контейнера я хочу, чтобы сценарий оболочки ждал ввода пользователя. Как я могу этого добиться?

Если я выполняю docker run -it --name example-container example-image:latest я не получаю фактический результат

Ожидаемый результат должен быть похож на если я выполняю только сценарий оболочки без docker

enter image description here

Как я могу запустить контейнер, чтобы получить результат, например прикрепленное изображение

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Ваша проблема заключается в использовании RUN в Dockerfile - он выполняет скрипт в этот момент во время создания образа (который не принимает ввод - поэтому он немедленно возвращается). Вместо этого вы должны использовать CMD или ENTRYPOINT, чтобы изменить исполняемый файл при запуске контейнера:

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

CMD /opt/example.sh
0 голосов
/ 16 июня 2020

Выполните указанные шаги.

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
...