Как получить идентификатор системы docker внутри контейнера?

#docker

#docker

Вопрос:

Насколько я понимаю, каждая установка docker имеет какой-то уникальный идентификатор. Я могу увидеть это, выполнив docker system info :

 $ docker system info

 // ... a lot of output
 ID: UJ6H:T6KC:YRIL:SIDL:5DUW:M66Y:L65K:FI2F:MUE4:75WX:BS3N:ASVK
 // ... a lot of output
  

Вопрос в том, возможно ли получить этот идентификатор из контейнера (путем выполнения кода внутри контейнера) без сопоставления каких-либо томов и т.д.?

Редактировать: Просто чтобы прояснить вариант использования (на основе комментариев): мы отправляем данные телеметрии из контейнеров docker на наш сервер. Нам нужно определить, какие контейнеры используют один и тот же хост. Этот идентификатор помог бы нам достичь этой цели (это своего рода идентификатор компьютера). Если есть какой-либо другой способ идентифицировать хост — это также может решить проблему.

Комментарии:

1. Кроме того, идентификатор бесполезен внутри контейнера docker

2. Вариант использования следующий: мы отправляем данные телеметрии из контейнеров docker на наш сервер. Нам нужно определить, какие контейнеры используют один и тот же хост. Этот идентификатор помог бы нам достичь этой цели (это своего рода идентификатор компьютера). Если есть какой-либо другой способ получить эту информацию — пожалуйста, дайте мне знать.

3. Я не уверен, но я думаю, что в docker-compose / kubernetes есть такой механизм. Я предлагаю вам не КОПИРОВАТЬ идентификатор в docker, как предложил @NeoAnderson, это лазейка в системе безопасности

4. В Kubernetes вы можете использовать нисходящий API для ввода имени узла в качестве переменной среды. Я не думаю, что Compose имеет что-либо непосредственно эквивалентное.

Ответ №1:

Нет — если вы явно не вводите эту информацию в контейнер (тома, КОПИЯ, переменная среды, аргумент, переданный во время сборки и сохраненный в файле и т.д.), Или вы извлекаете ее, например, с помощью GET запроса, эта информация недоступна внутри контейнеров docker.

Вы можете открыть консоль внутри контейнера и выполнить поиск по всем файлам, которые содержат этот идентификатор &rep -rnw '/' -e 'the-ID' , но ничто не будет соответствовать результатам поиска.

С другой стороны, любой переход из контейнера на хост был бы реальной проблемой безопасности.


Отредактируйте, чтобы ответить на обновление по вашему вопросу:

Хост docker имеет видимость в запущенных контейнерах. Гораздо лучшим подходом было бы отправить необходимую информацию с уровня хоста, а не с уровня контейнера.
Вы все еще можете отправлять данные непосредственно из контейнеров и использовать идентификатор контейнера, который известен внутри контейнера, и сопоставлять эту телеметрическую информацию с данными, отправленными с узла docker.

Еще один вариант, который, на мой взгляд, еще лучше, — отправить эти данные телеметрии в стандартный вывод контейнера. Эту информацию можно легко собрать и отправить в серверную часть телеметрии на хосте docker из драйвера ведения журнала.

Ответ №2:

Часто имя хоста контейнера является идентификатором контейнера — не идентификатором, о котором вы говорите, а идентификатором, который вы бы использовали, например, для docker container exec , так что это прекрасный идентификатор.