2017-05-15 71 views
3

這可能有點複雜的問題,但我可以嘗試任何和所有建議。從docker到websocket的彩色輸出

我正在運行哪些克隆一個Git倉庫碼頭工人,例如,它是一個PHP 7阿帕奇碼頭工人實例:

FROM php:7.0-apache 

隨着Symfony Process Component我啓動了我的容器中,並通過我的環境變量。

"docker run -e REPOSITORY=\"{$url}\" 
-e COMPOSER_ALLOW_SUPERUSER=1 
-e TERM='xterm-256color' arbiter bash -l" 

我已經加入了xterm-256-color環境,以確保我得到彩色輸出(糾正我,如果這是錯誤的)。

顯示容器的輸出我使用Symfony Process Component將它發送到websocket。

$process->run(function ($type, $buffer) use ($socket) { 
    socket_write($socket, $buffer, strlen($buffer)); 
}); 

在這一點上,我可以使用像socket.io這樣的東西來實時顯示在網頁上。

問題是我想用正常的顏色來顯示docker輸出,就像你通常用終端看到它一樣。儘管如此,所有的格式化和着色似乎都失去了。

是否有任何網站我可以通過碼頭輸出到一個websocket,仍然保持我的着色顯示在網頁上?

任何提示或技巧引導我在正確的方向是值得歡迎的,因爲我在這裏問很多。

感謝您的閱讀,歡呼聲。

編輯

需要明確的是,我還沒有得到任何的彩色輸出,從而遠離泊塢窗容器給我的輸出看起來簡直像這樣(作曲爲例):

[2017-02-12 01:02:56] local.INFO: remote: Counting objects: 69, done.   
remote: Compressing objects: 2% (1/47)   
remote: Compressing objects: 4% (2/47) 
+1

彩色輸出的格式是什麼? ANSI顏色? (即終端顏色)。如果是這種情況,您需要將其轉換爲HTML顏色,這是另一回事。像這樣:https://github.com/sensiolabs/ansi-to-html – Robert

+0

我似乎沒有得到任何格式,我可以告訴如果我把它傳遞給websocket。當我輸出到日誌文件時,我也沒有得到彩色輸出。當我真的潛入我的容器時,像這樣:'docker run -it -e REPOSITORY =「https://github.com/stephan-v/test.git」arbiter'雖然我正在獲取彩色輸出。 –

回答

2

在這種情況下,我只需要添加一個-t標誌給我的docker run命令。我試圖添加-it,導致錯誤。顯然,我的不好,沒有必要,因爲這個過程沒有任何互動。

在ANSI符號下面的例子中添加-t標誌等之後,開始出現:

docker run -t 
-e REPOSITORY=\"{$url}\" 
-e COMPOSER_ALLOW_SUPERUSER=1 
-e TERM='xterm' arbiter 

我格式化ANSI符號與@Robert一切所提供的庫現在工作完全正常。執行時:

socket_write($socket, $buffer, strlen($buffer)); 

我只需要記住還要傳遞生成的HTML字符串長度,它都呈現完美。