我有一个Dockerfile,用于构建包含自定义控制台应用程序的映像:
FROM ubuntu:bionic
# Some non-relevant steps...
CMD bin/my-console-app
my-console-app
是一个简单的控制台应用程序,运行时通常会为您提供插入命令的可能性。
例如
./my-console-app
my-console> some-command
Some result
my-console> some-other-command
Some other result
如果我使用-d
运行使用上述Dockerfile构建的容器,一切正常:
docker run --name my-app --network host -d myapp
使用网络我可以看到控制台应用程序正在正确运行。
但是,如果我不使用-d
来运行它,例如:
docker run --name my-app --network host myapp
然后我的终端会发疯,就像有人不断按Enter:
my-console>
my-console>
my-console>
my-console>
my-console>
my-console>
my-console>
my-console>
...
,这将永远持续下去。我无法在控制台应用程序中插入任何命令。
为什么会这样?我应该怎么做才能防止这种情况?
答案 0 :(得分:1)
我通过将-it
传递给docker run
命令解决了我的问题。
所以现在我使用以下命令运行容器:
docker run --name my-app --network host -it myapp
编辑:如果使用docker-compose来解决此问题,请为服务指定这2个选项:
stdin_open: true
tty: true
感谢@ user268396