docker-compose up和stdin上的用户输入

时间:2018-11-01 17:48:40

标签: linux docker docker-compose stdin

有人可以解释(也许提供解决方法)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

似乎确定

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)

对于我的用例来说,这似乎很奇怪,不好

我错过了什么吗?

2 个答案:

答案 0 :(得分:6)

docker compose up and user inputs on stdin

  

这是预期的行为。起来不是互动的。它可以开始   多个容器,因此您不能拥有一个带有   stdin可打开多个容器。

但是您可以选择使用docker-compose。

在另一个窗口中附加,当您以docker-compose开头时,可以添加-d参数,它将在后台启动该docker。

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {

    // Renderer code

    yourRenderer.fillColor = color

    // Return your renderer

}

然后只需附加该泊坞窗并输入值

docker-compose up -d

单行命令:

docker attach play_001_plop_1

答案 1 :(得分:0)

改为使用docker-compose run

docker-compose run my_image

它启动感兴趣的容器,并提供与docker run -it相同的交互式会话。如果您只需要在启动时一次交互式输入来初始化某些东西,就足够了。

描述为here