#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
, так что это прекрасный идентификатор.