Docker 使用 OpenSSL 和标准输入、标准输出执行

Docker Exec with OpenSSL and stdin, stdout

我正在尝试将 docker exec 与 OpenSSL 和管道一起使用,就像这样。我有一个名为 test1 的 运行ning 容器。

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 它们工作正常。 Is/does docker 对 stdin 和 stdout 流有什么不同吗?

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

  1. 按照上面的建议对输出行进行缓冲,这意味着 docker 命令变为 docker exec -t test1 cat key.pem
  2. 你现在 运行 的方式,并不清楚 docker exec 参数在哪里结束以及通过 | 的重定向从哪里开始。只需将整个命令更改为使 bash 清楚的命令,这应该可以工作

docker exec -t test1 cat key.pem | openssl req -subj '/CN=client' -new -key /dev/stdin -passin pass:123