Docker执行与OpenSSL和标准input,标准输出

我试图用OpenSSL和这样的pipe道使用docker exec。 我有一个运行称为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和stdoutstream做了什么不同?

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

  1. 按照上面的build议缓冲输出行,这意味着docker命令成为docker exec -t test1 cat key.pem
  2. 你正在运行的东西的方式,这是不是很清楚docker exec参数的结束位置以及通过|的redirect 开始。 简单地把总体的命令改变成一些明确的东西,这应该是有效的

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