当启用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参考