如何确定进程是否在 lxc/Docker 内部运行?

新手上路,请多包涵

有什么方法可以确定进程(脚本)是否在 lxc 容器(〜 Docker 运行时)内运行?我知道有些程序能够检测它们是否在虚拟机中运行,lxc/docker 有类似的东西吗?

原文由 Mate Varga 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 956
2 个回答

最可靠的方法是检查 /proc/1/cgroup 。它会告诉你初始化进程的控制组,当你 不在 容器中时,所有层次结构都是 / 。当您 容器内时,您将看到锚点的名称。对于 LXC/Docker 容器,它将分别类似于 /lxc/<containerid>/docker/<containerid>

原文由 jpetazzo 发布,翻译遵循 CC BY-SA 4.0 许可协议

Docker 在容器内目录树的根目录创建一个 .dockerenv 文件。这可以通过执行 ls -la /.dockerenv 出它是在容器启动时创建的。

您可以运行此脚本来验证:

 #!/bin/bash
if [ -f /.dockerenv ]; then
    echo "I'm inside matrix ;(";
else
    echo "I'm living in real world!";
fi

更多: Ubuntu实际上有一个bash脚本: /bin/running-in-container 它可以返回它被调用的容器类型。可能会有所帮助。不过不知道其他主要发行版。

原文由 at0S 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题