pub fn is_docker() -> bool {
use std::sync::LazyLock;
static IS_DOCKER: LazyLock<bool> = LazyLock::new(is_docker_impl);
*IS_DOCKER
}
#[cfg(target_os = "linux")]
fn is_docker_impl() -> bool {
fn is_dockerenv_present() -> bool {
std::path::Path::new("/.dockerenv").exists()
}
fn is_docker_in_cgroup() -> bool {
let cgroup_paths = ["/proc/1/cgroup", "/proc/self/cgroup"];
for path in &cgroup_paths {
if let Ok(contents) = std::fs::read_to_string(path)
&& contents.contains("docker")
{
return true;
}
}
false
}
is_dockerenv_present() || is_docker_in_cgroup()
}
#[cfg(not(target_os = "linux"))]
fn is_docker_impl() -> bool {
false
}