有人可以解释(也许提供解决方法)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)
对于我的用例来说,这似乎很奇怪,不好
我错过了什么吗?
答案 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。