Как получить доступ к идентификатору контейнера в приложении NodeJs в режиме хост-сети - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь получить идентификатор контейнера docker, когда сеть = настройки хоста включена, но вместо получения containerId я получаю имя экземпляра хоста. Но, если моя команда network = host не передана в команде, она выдает мне идентификатор контейнера, как и ожидалось. Вкратце:

Случай 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

Есть ли способ получить такой же вывод, например 67db4w32k112 и в случае 1?

1 Ответ

1 голос
/ 09 марта 2020

Посмотрев на эту ветку , вы, вероятно, сможете сделать что-то похожее на приведенное ниже, которое прочитает файл /proc/1/cpuset внутри контейнера. Этот файл имеет текущий идентификатор контейнера, содержимое выглядит следующим образом:

/docker/7be92808767a667f35c8505cbf40d14e931ef6db5b0210329cf193b15ba9d605

В вашем случае это будет более надежно, чем использование os.hostname(), поскольку он работает как с флагом --newtwork="host", так и без него docker команда запуска.

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);
});
...