如何pipe理数据到docker运行dockerified应用程序?

我通过这个Dockerfile dockerified httpie :

FROM alpine:3.6 MAINTAINER Philipp Kretzschmar <philipp.kretzschmar@gmail.com> ENV LAST_UPDATED=2017-06-01 ARG XDG_CACHE_HOME=/tmp/cache/ RUN apk update && \ apk add py-pip && pip install httpie && \ rm -rf /var/cache/apk/* CMD ["--help"] ENTRYPOINT ["/usr/bin/http"] 

你也可以直接拉图像:

 docker pull k0pernikus/httpie-docker-alpine:1.0.0 

使用httpie作为一个独立的程序,我知道build议通过回声(简单的例子)pipe道嵌套的JSON有效载荷:

 $ echo '{"property":"value"}' | http PUT https://jsonplaceholder.typicode.com -vvv 

并通过详细的输出标志-vvv httpie显示有效负载确实在请求中发送:

 PUT /posts HTTP/1.1 Accept: application/json, */* Accept-Encoding: gzip, deflate Connection: keep-alive Content-Length: 21 Content-Type: application/json Host: jsonplaceholder.typicode.com User-Agent: HTTPie/0.9.9 { "property": "value" } 

(jsonplaceholder URL将返回404,这很好,这个问题的范围只是发送正确的请求。)

现在我认为这将等同于通过docker执行命令:

 $ echo '{"property":"value"}' | docker run k0pernikus/httpie-docker-alpine:1.0.0 PUT https://jsonplaceholder.typicode.com -vvv 

但详细标志报告请求发送没有有效载荷:

 PUT / HTTP/1.1 Content-Length: 0 Accept-Encoding: gzip, deflate Host: jsonplaceholder.typicode.com Accept: */* User-Agent: HTTPie/0.9.9 Connection: keep-alive 

如何将数据传输到docker run命令?

你需要使用-i标志docker run ,以保持stdin打开。 比较:

 $ echo hello | docker run --rm alpine cat $ 

至:

 $ echo hello | docker run -i --rm alpine cat hello $