web-dev-qa-db-ja.com

標準入力でのdocker-compose upとユーザー入力

誰かが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

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

どうやら[〜#〜] ok [〜#〜]

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

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

どうやら[〜#〜] ok [〜#〜]

3)docker-stdin> docker-compose run plop

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

どうやら[〜#〜] ok [〜#〜]

4)docker-stdin> docker-compose up

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

これはかなり奇妙に思えますNOT OK私のユースケースでは

私は何かを逃しましたか?

6
webofmars

dockerが作成し、標準入力でユーザー入力

これは予想される動作です。 upはインタラクティブではありません。複数のコンテナを起動できるため、複数のコンテナ用にstdinを開いている単一のターミナルを持つことはできません。

しかし、docker-composeで実行できるオプションがあります。

別のウィンドウにアタッチし、docker-compose upで開始するときに、-dパラメーターを追加すると、そのdockerがバックグラウンドで開始されます。

docker-compose up -d

次に、そのDockerを接続して値を入力します

docker attach play_001_plop_1

単一行コマンド:

docker-compose up -d && docker attach play_001_plop_1
9
Edmhs