有什么方法可以确定进程(脚本)是否在 lxc 容器(〜 Docker 运行时)内运行?我知道有些程序能够检测它们是否在虚拟机中运行,lxc/docker 有类似的东西吗?
原文由 Mate Varga 发布,翻译遵循 CC BY-SA 4.0 许可协议
有什么方法可以确定进程(脚本)是否在 lxc 容器(〜 Docker 运行时)内运行?我知道有些程序能够检测它们是否在虚拟机中运行,lxc/docker 有类似的东西吗?
原文由 Mate Varga 发布,翻译遵循 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 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
2 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答795 阅读✓ 已解决
最可靠的方法是检查
/proc/1/cgroup
。它会告诉你初始化进程的控制组,当你 不在 容器中时,所有层次结构都是/
。当您 在 容器内时,您将看到锚点的名称。对于 LXC/Docker 容器,它将分别类似于/lxc/<containerid>
或/docker/<containerid>
。