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

问题描述:

我试图使用Docker执行与OpenSSL和管道这样。我有一个运行称为test1的容器。Docker执行与OpenSSL和标准输入,标准输出

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流有什么不同?

+0

你上次'泊坞窗exec'既没有'-i'也不'-t'你可以尝试用' - 它? – user2915097

+0

刚刚尝试过同样的结果。 – user1513388

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

  1. 使缓冲输出线如上建议,这意味着搬运工命令变为docker exec -t test1 cat key.pem
  2. 你现在正在运行的东西的方式,并不清楚码头执行参数结束以及通过|开始重定向的位置。简单地改变整体命令的东西,使这个清楚的bash,这应该工作

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

+0

谢谢你。因此,如果我运行上述获取和未知选项'未知选项client.csr',这有点奇怪,因为我知道该字符串在没有docker exec的情况下工作。 – user1513388

+0

做了一个小的编辑也分组管道的右侧,应该帮助我想:) –

+0

行,所以这个工程'docker exec -t test1 cat key.pem | openssl req -subj'/ CN = client'-new -key/dev/stdin -passin pass:123' – user1513388