【问题标题】:cpplint misbehaving in docker containerdocker容器中的cpplint行为不端
【发布时间】:2019-11-09 04:48:23
【问题描述】:

我正在尝试在 Docker 容器中运行 cpplint.py。

这是我用来制作图像 lint:latest 的 Dockerfile:

FROM ubuntu:18.04

# update and install dependencies
RUN apt-get update \
    && apt-get -y -qq install software-properties-common \
    && apt-get -y -qq install python3.7 \
    && ln -s /usr/bin/python3 /usr/bin/python

# install our linter
COPY cpplint.py /usr/sbin
RUN chmod +x /usr/sbin/cpplint.py

# install a test file
COPY Types.h .

我这样运行容器:

$ docker run -it --rm lint:latest bash
root@17a20248ee33:/# cpplint.py Types.h
root@17a20248ee33:/# echo $?
1

其中显示 cpplint.py 返回错误代码。

请注意,运行cpplint.py --help 会正常显示帮助屏幕。篇幅较长,这里就不一一列举了。

在容器外运行相同的命令可以正常工作:

$ ./cpplint.py Types.h
Types.h:0:  No #ifndef header guard found, suggested CPP variable is: _LINT_TYPES_H_  [build/header_guard] [5]
Done processing Types.h
Total errors found: 1

根据Docker's run reference 默认情况下,STDOUT 和 STDERR 都附加到终端。我知道 cpplint 将错误写入 STDERR,但不要认为这就是为什么我在容器中运行时看不到相同输出的原因。我已经尝试使用 2>&1 操作将 STDERR 强制到 STDOUT 并得到相同的结果。

知道为什么我在容器中运行 cpplint.py 时看不到它的输出吗?

【问题讨论】:

    标签: python docker dockerfile cpplint


    【解决方案1】:

    在容器中尝试使用pip3安装cpplint.py

    FROM ubuntu:18.04
    
    # update and install dependencies
    RUN apt-get update \
        && apt-get -y -qq install software-properties-common \
        && apt-get -y -qq install python3.7 python3-pip \
        && pip3 install cpplint
    
    # install a test file
    COPY Types.h .
    

    【讨论】:

    • 谢谢 - 这对 root@0d6c341a408f:/# cpplint ./Types.h Done processing ./Types.h 有点帮助,但从容器外部运行时不会产生错误消息。
    • 您在容器外使用哪个 cpplint 版本?你是从哪里弄来的? pip 版本来自分叉 - github.com/cpplint/cpplint。你修改过cpplint吗?您在主机上使用哪个 python 版本?
    • cpplint.py 支持在 CPPLINT.cfg 中指定的每个目录的配置,因此如果您在主机上有这样的配置,请将其复制到容器中
    • 我发现删除Types.h开头的#pragma once导致使用Vasil方法安装的版本可以工作。# cpplint --version Cpplint fork (https://github.com/cpplint/cpplint) cpplint 1.4.4 Python 3.6.8 (default, Oct 7 2019, 12:59:55) [GCC 8.3.0]
    • 我认为发生的事情是容器中的版本现在将 #pragma once 识别为包含保护,这是文件中唯一的样式错误。换句话说,它正在工作 :-) 我将尝试使用其他一些文件。
    猜你喜欢
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多