web*_*ars 5 linux stdin docker docker-compose
有人可以解释(并可能给出解决方法)以下docker-compose的行为吗?
给出以下文件:
Dockerfile
FROM alpine:3.8
COPY ./entrypoint.sh /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]
Run Code Online (Sandbox Code Playgroud)
entrypoint.sh
#!/bin/sh
until [ ! -z "$PLOP" ]; do
echo -n 'enter value here: '
read PLOP
done
echo "Good ... PLOP is $PLOP"
exit 1
Run Code Online (Sandbox Code Playgroud)
泊坞窗,compose.yml
version: '3.7'
services:
plop:
tty: true
stdin_open: true
image: webofmars/plop:latest
Run Code Online (Sandbox Code Playgroud)
输出将如下:
1) ./entrypoint.sh
docker-stdin> ./entrypoint.sh
enter value here:
CASE1
Good ... PLOP is CASE1
Run Code Online (Sandbox Code Playgroud)
这似乎OK
2) docker-stdin> docker run -it webofmars/plop
enter value here: CASE2
Good ... PLOP is CASE2
Run Code Online (Sandbox Code Playgroud)
这似乎OK
3) docker-stdin> docker-compose run plop
enter value here: CASE3
Good ... PLOP is CASE3
Run Code Online (Sandbox Code Playgroud)
这似乎OK
4) docker-stdin> docker-compose up
Recreating docker-stdin_plop_1 ... done
Attaching to docker-stdin_plop_1 (last forever)
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪,不适合我的用例
我错过了什么吗?
这是预期的行为。起来不是互动的。它可以启动多个容器,因此您不能有一个为多个容器打开了stdin的终端。
但是您可以使用docker-compose进行选择。
附加在其他窗口中,当您从docker-compose up开始时,可以添加-d参数,它将在后台启动该docker。
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
然后只需附加该泊坞窗并输入值
docker attach play_001_plop_1
Run Code Online (Sandbox Code Playgroud)
单行命令:
docker-compose up -d && docker attach play_001_plop_1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2385 次 |
| 最近记录: |