Git Bash中交互式运行Docker报错(前缀winpty无效)
搞定Git Bash里Docker交互式运行的问题
嘿,作为Docker新手遇到这个问题很正常,我来一步步帮你解决:
首先,为啥加了winpty还是没效果?你的Dockerfile有个小细节
你现在的Dockerfile里写的CMD echo "Test",这个命令是跑完就立刻退出的——哪怕你用-it参数启动容器,容器执行完echo这句话就直接停了,所以你根本看不到交互界面就没了,这不是winpty的锅,是容器本身活太短啦。
要实现真正的交互式运行,你得让容器启动后一直保持一个可操作的shell,把Dockerfile改成这样:
FROM ubuntu:12.04 CMD ["/bin/bash"]
然后重新构建镜像:
docker build -t dt_test .
接下来解决Git Bash的TTY错误问题
Git Bash用的是mintty终端,和Docker的TTY兼容有小问题,报错提示里说的winpty确实是解决方案,但要注意命令格式:
方案一:每次启动加winpty前缀
完整的正确命令应该是:
winpty docker run -it dt_test
现在换了能保持shell的Dockerfile,再跑这个命令,应该就能顺利进入Ubuntu的交互式bash界面了。
方案二:一劳永逸,修改Git Bash启动设置
如果你不想每次都输winpty,可以改下Git Bash的快捷方式:
- 找到Git Bash的快捷图标,右键点「属性」
- 在「目标」栏的最后加上
--winpty -i,比如原来的目标是"C:\Program Files\Git\git-bash.exe",改成"C:\Program Files\Git\git-bash.exe" --winpty -i - 确定后重新打开Git Bash,之后直接输
docker run -it dt_test就能正常用了
额外小检查:看看容器状态
如果还是有问题,先查下容器的状态,确认是不是真的启动过:
docker ps -a
要是看到容器状态是Exited (0),那还是因为容器执行完命令就退出了,回到第一步调整Dockerfile就行。
内容的提问来源于stack exchange,提问作者LemonSnippet
相关产品推荐
相关产品推荐

