3

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

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

FROM php:7.0-apache

使用Symfony 进程组件,我正在启动我的容器并传递我的环境变量。

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

我添加了xterm-256-color环境以确保我得到彩色输出(如果这是错误的,请纠正我)。

为了显示容器的输出,我使用 Symfony 进程组件将其发送到 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)
4

1 回答 1

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 的字符串长度,这一切都会完美呈现。

于 2017-05-15T22:00:59.713 回答