docker-compose up и пользовательские вводы на stdin - PullRequest
0 голосов
/ 01 ноября 2018

Может кто-нибудь объяснить (и, возможно, дать обходной путь) для следующего поведения docker-compose?

Имеются следующие файлы:

Dockerfile

FROM alpine:3.8

COPY ./entrypoint.sh /entrypoint.sh

ENTRYPOINT [ "/entrypoint.sh" ]

entrypoint.sh

#!/bin/sh

until [ ! -z "$PLOP" ]; do
    echo -n 'enter value here: '
    read PLOP
done

echo "Good ... PLOP is $PLOP"

exit 1

докер-compose.yml

version: '3.7'

services:
  plop:
    tty: true
    stdin_open: true
    image: webofmars/plop:latest

Вывод будет следующим:

1) ./entrypoint.sh

docker-stdin> ./entrypoint.sh
enter value here:
CASE1
Good ... PLOP is CASE1

Что кажется ОК

2) docker-stdin> docker run -it webofmars/plop

enter value here: CASE2
Good ... PLOP is CASE2

Что кажется ОК

3) docker-stdin> docker-compose run plop

enter value here: CASE3
Good ... PLOP is CASE3

Что кажется ОК

4) docker-stdin> docker-compose up

Recreating docker-stdin_plop_1 ... done
Attaching to docker-stdin_plop_1 (last forever)

Что выглядит довольно странно и НЕ ОК для моего варианта использования

Я что-то пропустил?

1 Ответ

0 голосов
/ 14 декабря 2018

Докер создает и вводит пользователя на стандартный ввод

Это ожидаемое поведение. вверх не является интерактивным. Это может начаться несколько контейнеров, поэтому вы не можете иметь один терминал, который имеет стандартный ввод для нескольких контейнеров.

Но есть вариант, который вы можете сделать с помощью docker-compose.

Присоединение в другом окне. Когда вы начинаете с docker-compose up, вы можете добавить параметр -d, и он запустит этот докер в фоновом режиме.

docker-compose up -d

Затем просто присоедините этот докер и введите значение

docker attach play_001_plop_1

Однострочная команда:

docker-compose up -d && docker attach play_001_plop_1
...