• 代码判断是否运行在docker环境中


    属于一个比较常见的需求,而且社区已经有了好多实现了,原理很简单

    原理说明

    判断/.dockerenv 是否存在或者是否包含cgroup

    参考代码

    'use strict';
    const fs = require('fs');
    let isDocker;
    function hasDockerEnv() {
        try {
            fs.statSync('/.dockerenv');
            return true;
        } catch (_) {
            return false;
        }
    }
    function hasDockerCGroup() {
        try {
            return fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');
        } catch (_) {
            return false;
        }
    }
    module.exports = () => {
        if (isDocker === undefined) {
            isDocker = hasDockerEnv() || hasDockerCGroup();
        }
        return isDocker;
    };

    说明

    类似的方法可以移植到其他语言,而且也已经有了类似的实现了,比如golang

    func (app *App) isRunningInDockerContainer() bool {
        // docker creates a .dockerenv file at the root
        // of the directory tree inside the container.
        // if this file exists then the viewer is running
        // from inside a container so return true
        if _, err := os.Stat("/.dockerenv"); err == nil {
            return true
        }
        return false
    }

    参考资料

    https://github.com/sindresorhus/is-docker

  • 相关阅读:
    day_07 深浅拷贝
    day_06 再谈编码
    day_05 字典
    day_04 列表
    day_03 字符串
    HDU 1049 Climbing Worm
    HDU 1720 A+B Coming
    Pascal向C++的跨越
    B-Boxes
    喵哈哈村的狼人杀大战(4)
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/13984348.html
Copyright © 2020-2023  润新知