2016-03-01 152 views
1

我試圖使用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

回答

2

你應該能夠做兩件事情來解決這個問題:

  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

相關問題