running_in_container/
lib.rs

1use std::fs::File;
2use std::io::{self, prelude::*, BufReader};
3
4fn run(path: &str) -> Result<bool, io::Error> {
5    let file = File::open(path)?;
6    let reader = BufReader::new(file);
7
8    for line in reader.lines() {
9        if line?.contains("/docker/") {
10            return Ok(true);
11        }
12    }
13
14    Ok(false)
15}
16
17pub fn is_inside_docker() -> Result<bool, io::Error> {
18    run("/proc/1/cgroup")
19}
20
21#[test]
22fn test_detects_host_when_typical() {
23    let expected = false;
24
25    let actual = run("test/proc_1_cgroup.host").unwrap();
26
27    assert_eq!(expected, actual);
28}
29
30#[test]
31fn test_detects_docker_when_typical() {
32    let expected = true;
33
34    let actual = run("test/proc_1_cgroup.docker").unwrap();
35
36    assert_eq!(expected, actual);
37}