如何将容器A中的Espressif库文件夹共享给容器B?
问题:容器B无法访问容器A中的Espressif库路径,导致cppcheck静态分析失败
背景
- 持续集成环境:Jenkins主机运行流水线,依次启动容器A(项目构建)和容器B(静态分析)
- 项目信息:ESP32 IoT项目,使用Espressif官方镜像
espressif/idf:v4.2.2完成构建 - 目录共享:Jenkins主机的项目文件夹
/var/lib/jenkins/workspace/iot-proj/通过卷挂载方式共享给容器 - 构建操作:执行以下命令完成构建后,在共享目录的
build文件夹下生成compile_commands.json文件,该文件可被容器B正常读取docker run -v $WORKSPACE/ESPComm:$WORKSPACE/ESPComm -w $WORKSPACE/ESPComm espressif/idf:v4.2.2 idf.py build
问题描述
编译项目依赖的Espressif库文件存放在容器A的/opt/esp/idf/...路径下,该路径被记录到了compile_commands.json中。但容器B运行cppcheck进行静态分析时,无法访问这个路径,导致分析失败。
已尝试的无效方法
- 尝试通过
sudo ls /proc/$(docker inspect --format {{.State.Pid}} YOUR_CONTAINER_NAME)/root命令访问容器A的文件系统(即使使用binfs),未成功 - 尝试通过卷挂载方式启动容器,命令如下,但挂载后的目标目录
/opt/esp/idf/components/为空docker run -it -v $PWD:/project -v /opt/esp/idf/components/:/opt/esp/idf/components/ -w /project espressif/idf:v4.2.2 - 尝试通过
.suppressions文件让cppcheck忽略该路径,执行cppcheck命令时出现如下报错:+ cppcheck --project=/var/lib/jenkins/workspace/iot-proj-TEST/ESPComm/build/compile_commands.json --inline-suppr --enable=all --suppress=missingInclude --suppress=unmatchedSuppression --suppressions-list=/var/lib/jenkins/workspace/iot-proj-TEST/ESPComm/build/.suppressions --inconclusive --std=c11 --xml --xml-version=2 --std=c11 cppcheck: error: '/opt/esp/idf/components/xtensa/debug_helpers.c' from compilation database does not exist cppcheck: error: failed to load project '/var/lib/jenkins/workspace/iot-proj-TEST/ESPComm/build/compile_commands.json'. An error occurred.
需求
如何让容器B访问容器A中的Espressif库文件夹?
内容的提问来源于stack exchange,提问作者anijahzarri
相关产品推荐
相关产品推荐

