bash -c与Dockerfile RUN的$PPID行为差异技术排查
关于bash -c与Dockerfile RUN指令中$PPID行为的测试分析
主机环境测试
- 执行
test.sh脚本时,bash -c 'sh echo-ppid.sh'执行环境的$PPID与sh test.sh的$PPID完全一致 sh -c场景下的$PPID表现符合常规预期
Docker容器环境测试(基于nvcr.io/nvidia/pytorch:21.09-py3镜像)
- 使用
RUN ["sh", "test.sh"]指令时,输出结果中多数进程的$PPID为1,仅部分嵌套子进程的父PID显示正常 - 测试单条RUN命令时出现异常:当前进程ID
$$=1且父进程ID$PPID=0,直接导致ps -o comm $PPID命令执行失效
问题排查结论
- 容器内
/bin/sh符号链接指向/usr/bin/sh-wrap,而sh-wrap底层实际调用的是bash - 推测是
sh-wrap采用的exec无fork优化机制,引发了上述$PPID异常问题
内容的提问来源于stack exchange,提问作者YouJiacheng
相关产品推荐
相关产品推荐

