use std::fs;
pub fn is_running_in_container() -> bool {
if std::path::Path::new("/.dockerenv").exists() {
return true;
}
if let Ok(cgroup) = fs::read_to_string("/proc/self/cgroup") {
if cgroup.contains("/docker/")
|| cgroup.contains("/containerd/")
|| cgroup.contains("/podman/")
|| cgroup.contains("/lxc/")
|| cgroup.contains("/kubepods/")
{
return true;
}
}
const CONTAINER_ENV_VARS: &[&str] = &[
"KUBERNETES_SERVICE_HOST",
"DOCKER_CONTAINER",
"container",
"PODMAN_CONTAINER",
];
if CONTAINER_ENV_VARS
.iter()
.any(|var| std::env::var(var).is_ok())
{
return true;
}
false
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_is_running_in_container() {
let _ = is_running_in_container();
}
}