首页 > 解决方案 > docker-compose up 和用户在标准输入上的输入

问题描述

有人可以为 docker-compose 的以下行为解释(并可能提供解决方法)吗?

鉴于以下文件:

Dockerfile

FROM alpine:3.8

COPY ./entrypoint.sh /entrypoint.sh

ENTRYPOINT [ "/entrypoint.sh" ]

入口点.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)

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

我错过了什么吗?

标签: linuxdockerdocker-composestdin

解决方案


docker compose up 和用户在标准输入上的输入

这是预期的行为。up 不是交互式的。它可以启动多个容器,因此您不能拥有为多个容器打开标准输入的单个终端。

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

附加在不同的窗口中,当您使用 docker-compose up 启动时,您可以添加 -d 参数,它将在后台启动该 docker。

docker-compose up -d

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

docker attach play_001_plop_1

单行命令:

docker-compose up -d && docker attach play_001_plop_1

推荐阅读