【问题标题】:How to pipe in data to dockerified app on docker run?如何在 docker run 上将数据通过管道传输到 dockerified 应用程序?
【发布时间】: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 命令?

【问题讨论】:

    标签: docker pipe


    【解决方案1】:

    您需要使用-i 标志到docker run 以保持stdin 处于打开状态。比较:

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

    收件人:

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

    【讨论】:

    • 我正要写我试过这个。然后我意识到,我正在将标志添加到 httpie 命令 m)
    猜你喜欢
    • 2016-06-11
    • 2023-03-08
    • 2021-08-13
    • 1970-01-01
    • 2011-08-09
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多