我在使用docker-machine托管的Windows 10上运行Docker。我正在尝试使用此命令将数据从主机传输到带有“docker run”的容器中:
echo test | docker run -i ubuntu:16.04 cat -
我希望这个命令将'test'输出到stdout,但它只是打印一个空行:
jannis MINGW64 ~
$ echo test | docker run -i ubuntu:16.04 cat -
jannis MINGW64 ~
$
然而,当我进入docker-machine时,命令按预期工作:
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
有人可以告诉我:
PS我在Windows 10计算机上使用GitBash environment(基于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
答案 0 :(得分:0)
原来我终端使用(ConEmu)是个问题。或者更确切地说是Docker专用于ConEmu的代码库中的special case。
按照this comment中建议的解决方法,我设法让管道工作:
作为一种解决方法,禁用
ConEmu Settings -> Features -> ANSI and xterm sequences
帮助了我。
相关链接:
我已在docker-machine
的发行人中发布a bug,我们会看到他们的意见。
目前,我已经找到了解决方法。我将我希望管道传输的有效负载保存到本地文件,然后将文件传输到带有docker cp
的容器中,然后在容器内本地传输它。
总结一下:
我想要做的事情并不适用于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