如何在主机网络模式下访问NodeJs应用程序中的容器id



当启用network=host设置时,我试图获取docker容器的Id,但我获取的不是容器Id,而是主机实例名称。但是,如果命令中没有传递我的network=host,它会按预期给我containerId。简而言之:

案例1-我使用命令docker run --network="host" -d -it myservice:1.0运行我的容器

const os = require("os");
console.log(os.hostname()) /// prints **docker-desktop**

案例2-我使用命令docker run -d -it myservice:1.0运行我的容器

const os = require("os");
console.log(os.hostname()) /// prints **67db4w32k112** as expected

有没有一种方法可以获得相同的输出,即情况1中的67db4w32k112

通过查看这个线程,您可能可以执行以下操作,读取容器中的/proc/1/cpuset文件。这个文件有当前的容器ID,内容看起来像:

/docker/7be92808767a667f35c8505cbf40d14e931ef6db5b0210329cf193b15ba9d605

在您的情况下,这将比使用os.hostname()更可靠,因为它可以在docker run命令上使用和不使用--newtwork="host"标志。

fs = require('fs')
fs.readFile('/proc/1/cpuset', 'utf8', function(err, data) {
if (err) {
return console.log(err);
}
let containerID = data.replace("/docker/", "");
console.log(containerID);
});

尝试使用帮助程序包,如docker容器id

在包.json 中添加依赖项

npm install --save docker-container-id

这里有一个例子:

const getId = require('docker-container-id');
async function() {
console.log("I'm in container:", await getId());
}

npmjs参考

相关内容

最新更新