将数据从主机管道插入到docker container命令中,无法使用docker机器

时间:2017-08-22 07:47:43

标签: linux docker pipe docker-machine

我在使用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

有人可以告诉我:

  1. 为什么在docker-machine内管道进入容器不起作用?这是一个错误吗?
  2. 是否有解决方法(除了上面提供的 - ssh到docker-machine VM)?
  3. 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
    

1 个答案:

答案 0 :(得分:0)

编辑2-11-2017

原来我终端使用(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