将数据从主机传送到docker集装箱命令不能与docker机器一起工作

我在使用docker-machine托pipe的Windows 10上运行Docker。 我试图从主机的数据pipe道进入一个容器产生与'docker运行'与此命令:

echo test | docker run -i ubuntu:16.04 cat - 

我希望这个命令输出“testing”的标准输出,但它所做的是打印一个空行:

 jannis MINGW64 ~ $ echo test | docker run -i ubuntu:16.04 cat - jannis MINGW64 ~ $ 

但是,当我到docker机器ssh命令按预期工作:

 jannis MINGW64 ~ $ docker-machine ssh ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\_______/ _ _ ____ _ _ | |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ | '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__| | |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ | |_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| Boot2Docker version 17.06.1-ce, build HEAD : 80114bc - Fri Aug 18 17:58:04 UTC 2017 Docker version 17.06.1-ce, build 874a737 docker@default:~$ echo test | docker run -i ubuntu:16.04 cat - test 

有人可以告诉我:

  1. 为什么在docker-machine中pipe道进入容器不起作用? 这是一个错误?
  2. 有没有解决方法(除了上面提供的 – docker机VM中的ssh)?

PS我在我的Windows 10机器上使用GitBash环境 (基于MSYS2 / MINGW )。 版本信息:

 jannis MINGW64 ~ $ uname -a MINGW64_NT-10.0 jannis 2.6.1(0.306/5/3) 2017-01-14 09:41 x86_64 Msys jannis MINGW64 ~ $ docker version Client: Version: 17.06.0-ce API version: 1.30 Go version: go1.8.3 Git commit: 02c1d87 Built: Fri Jun 23 21:30:30 2017 OS/Arch: windows/amd64 Server: Version: 17.06.1-ce API version: 1.30 (minimum version 1.12) Go version: go1.8.3 Git commit: 874a737 Built: Thu Aug 17 22:54:55 2017 OS/Arch: linux/amd64 Experimental: false 

编辑2-11-2017

原来,这是我使用的terminal( ConEmu )的一个问题。 或者更确切地说,是专门为ConEmudevise的Docker代码库中的特例 。

在此评论中提出的解决办法之后,我设法使pipe道工作:

作为解决方法,禁用ConEmu Settings -> Features -> ANSI and xterm sequences帮助了我。

相关链接:

  • 我在docker机器的票: https : //github.com/docker/machine/issues/4235
  • ConEmu中的票: https : //github.com/Maximus5/ConEmu/issues/958
  • Docker中的票: https : //github.com/moby/moby/issues/28814

原来的答案

我已经在docker docker-machine的issuetracker上发布了一个bug ,我们会看看他们在说什么。

目前我已经结束了一个解决方法。 我正在保存我要pipe道到本地文件的有效载荷,然后用docker cp将文件传输到容器中,然后在容器中本地pipe道。

总结一下:

我想要做什么,不能与docker-machine一起工作是:

 echo piped content | docker run -i ubuntu:16.04 cat - 

相反,我这样做:

 jannis MINGW64 ~ $ docker create --name test-container ubuntu:16.04 sh -c 'cat - < /tmp/emulatedpipe' a6eaf1e5f143113bcffa9df66a47b37c124cd34447b670480b5f096d45b7b162 jannis MINGW64 ~ $ echo piped content > emulatedpipe jannis MINGW64 ~ $ docker cp emulatedpipe test-container:/tmp jannis MINGW64 ~ $ docker start -i test-container piped content