如何在 docker run 上将数据通过管道传输到 dockerified 应用程序?
Posted
技术标签:
【中文标题】如何在 docker run 上将数据通过管道传输到 dockerified 应用程序?【英文标题】:How to pipe in data to dockerified app on docker run? 【发布时间】:2017-12-12 17:07:36 【问题描述】:我已经通过这个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 作为独立程序,我知道建议通过 echo(简化示例)在嵌套的 json 有效负载中管道:
$ echo '"property":"value"' | http PUT https://jsonplaceholder.typicode.com -vvv
并且通过详细的输出标志-vvv
httpie 表明payload确实是在请求中发送的:
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 via执行命令了:
$ 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
命令?
【问题讨论】:
【参考方案1】:您需要使用-i
标志到docker run
以保持stdin
处于打开状态。比较:
$ echo hello | docker run --rm alpine cat
$
收件人:
$ echo hello | docker run -i --rm alpine cat
hello
$
【讨论】:
我正要写我试过这个。然后我意识到,我正在将标志添加到 httpie 命令 m)以上是关于如何在 docker run 上将数据通过管道传输到 dockerified 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Openshift平台上通过Jenkins管道运行docker-in-docker?