【发布时间】: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