linux - 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)
对于我的用例来说,这似乎很奇怪而且不好
我错过了什么吗?
解决方案
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
推荐阅读
- c++ - 在 C++ 中将对象转换为不相关对象的正确方法是什么
- ios - 快速构建错误我将字节数组更改为除前几个字节之外的所有字节
- javascript - Jquery animate() 不透明度工作但动画正确不?
- flutter - 使用 Wrap 时如何以不同方式对齐包装的项目?
- python - 将数据框从起始值填充到停止点
- snowflake-cloud-data-platform - 如何动态地将角色名称传递给 IS_ROLE_IN_SESSION?
- ios - 快速映射自定义两个对象
- azure - Cosmosdb mongo 在大集合上创建索引 - 风险
- javascript - 如何使用带有引导程序的jquery在一个模式上使用多个按钮
- html - HTML,href 在只需要一行时将其自身扩展到 6 行