首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows上将stdin管道连接到docker exec

在Windows上将stdin管道连接到docker exec
EN

Stack Overflow用户
提问于 2021-01-11 22:15:39
回答 1查看 261关注 0票数 2

我正在尝试将SQL数据导入到docker容器中。使用git bash / mintty:

代码语言:javascript
复制
> docker exec -it 79c5c16acca0 mysql -uusername -ppassword dbname
the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

> winpty docker exec -it 79c5c16acca0 mysql -uusername -ppassword dbname
stdin is not a tty

我也尝试过Powershell:

代码语言:javascript
复制
> Get-Content powo.sql | docker exec -it 79c5c16acca0 mysql -uusername -ppassword dbname
the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

FWIW,在容器中运行bash运行良好:

代码语言:javascript
复制
> docker exec -it 79c5c16acca0 bash
root@79c5c16acca0:/#
EN

回答 1

Stack Overflow用户

发布于 2021-01-12 00:46:08

如果您删除了-t,这将会起作用。

代码语言:javascript
复制
$ docker run --rm --name example alpine sleep 100

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                 NAMES
49968909e3e4   alpine    "sleep 100"              8 seconds ago    Up 7 seconds                          example

$ echo "hi" | docker exec -it example cat
the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

$ echo "hi" | docker exec -i example cat
hi

对于bashps和Git bash也是如此。

这个answer是我能找到的关于-i-t做什么的最好的参考资料(用我能理解的语言)。

因此,我猜测在通过管道输入内容时不能使用-t,因为-t意味着输入来自终端设备,但在本例中,输入是管道(它本身来自终端设备)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65668498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档