从docker到websocket的彩色输出

时间:2017-05-15 21:16:17

标签: php symfony docker websocket symfony-process

这可能是一个复杂的问题,但我愿意尝试向我提出任何建议。

我正在运行一个克隆git存储库的docker实例,它是一个php 7 apache docker实例:

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输出,就像你通常用终端看到它一样。尽管如此,所有格式和着色似乎都会丢失。

是否有任何网络我可以将docker输出传递给websocket并仍然保持我的颜色显示在网页上?

由于我在这里提出了很多要求,因此欢迎任何提示或提示指导我朝着正确的方向前进。

感谢阅读,欢呼。

修改

要清楚我到目前为止还没有获得任何彩色输出从docker容器给我的输出看起来就像这样(作曲家示例):

[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 个答案:

答案 0 :(得分:2)

在这种情况下,我只需要在docker run命令中添加-t标志。我试图添加导致错误的-it。显然,我的不好,没有必要,因为这个过程没有任何互动。

添加-t标志后,如下例所示,ANSI符号开始显示:

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

我使用@Robert提供的库格式化ANSI符号现在一切正常。执行时:

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

我只需记住也传递生成的HTML的字符串长度,这一切都呈现完美。