Docker Exec与OpenSSL和stdin,stdout

时间:2016-03-01 21:31:23

标签: docker openssl pipe

我试图将docker exec与OpenSSL一起使用并像这样使用管道。我有一个名为test1的容器。

1. openssl genrsa -des3 -passout pass:123 2048 | docker exec -i test1 sh -c 'cat >/key.pem
2. docker exec test1 cat key.pem
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,DE60A9F33B9E508D

    /uJYBfM6YwCkIgrgQSH......
3. docker exec test1 cat key.pem | openssl req -subj '/CN=client' -new -key -out client.csr -passin pass:123

write /dev/stdout: broken pipe

如果我在不使用docker的情况下运行这些命令,则可以正常工作。 / docker是否与stdin和stdout流做了什么不同?

1 个答案:

答案 0 :(得分:2)

你应该能够通过做两件事来解决这个问题:

  1. 按照上面的建议使输出行缓冲,这意味着docker命令变为docker exec -t test1 cat key.pem
  2. 你现在正在运行的方式,并不是很清楚docker exec参数的结束位置以及通过|重定向的位置。只需将整体命令更改为能够清除bash的内容,这应该可以正常工作
  3. docker exec -t test1 cat key.pem | openssl req -subj '/CN=client' -new -key /dev/stdin -passin pass:123