Docker 日志不显示颜色(express + nodejs 图像)

Shi*_*shi 3 node.js docker

一个小而有趣的问题(对我来说):

我正在尝试从我编写的小型服务器(nodejs + express)创建 docker 映像。我的服务器代码是:

var express = require('express');
var Inflector = require('inflected');
var colors = require('colors');

var app = express();

app.get('/hello/:name', function(req, res, next){
    var name = Inflector.titleize(req.params.name);
    console.log("Saying hello to " + name.yellow);
    res.send('Hello ' + name);
});

var port = 9090;
app.listen(port, function(){
    console.log(('App is running on port ' + port).inverse);
});
Run Code Online (Sandbox Code Playgroud)

我正在用这个 Dockerfile 创建我的图像:

FROM centos:centos6

RUN     rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

RUN     yum install -y npm

COPY . /src

RUN cd /src; npm install

EXPOSE 9090

CMD ["node", "/src/index.js"]
Run Code Online (Sandbox Code Playgroud)

使用常用命令构建和运行映像:

docker build -t username:centos-nodejs
docker run -p 9090:9090 username:centos-nodejs
Run Code Online (Sandbox Code Playgroud)

我期待日志在命令行中显示颜色,就像没有 docker 时一样(例如node index.js)。

是什么原因,我可以解决这个问题吗?

Ale*_*lva 6

您需要使用“-it”选项运行容器:

docker run -it -p 9090:9090 username:centos-nodejs
Run Code Online (Sandbox Code Playgroud)

  • 我如何使用“docker-compose”来做到这一点? (11认同)
  • 尝试[这个](/sf/answers/2740502831/): (3认同)

DSh*_*ook 6

不是这个特定问题的答案,但如果您使用调试库并遇到相同的问题,则有一个未记录的环境变量,即使在非 TTY 中也能启用颜色:

https://github.com/visionmedia/debug/blob/39ecd87bcc145de5ca1cbea1bf4caed02c34d30a/node.js#L45

因此,添加DEBUG_COLORS=true到您的环境变量中可以修复调试库颜色。