Почему ifconfig не доступен в контейнере Ubuntu Docker?

64

С основанием ubuntu:12.04, ifconfigне доступен в контейнере, хотя ipкоманда доступна, почему это? и как попасть ifconfigв контейнер?

Пеллеоном
источник
Я знаю, что ifconfigэто как-то не рекомендуется, но некоторые программы все еще зависят от него.
Пеллеон
3
Разработчики еще живы? Это было осуждено несколько лет назад.
Майкл Хэмптон
Существует ошибка при использовании ipв текущей версии программного обеспечения. Мне нужен быстрый обход проблемы.
Пеллеон
1
«Некоторые программы» и «есть ошибка»: можете ли вы быть более конкретным?
Марк Вагнер

Ответы:

95

Вы можете установить ifconfig с помощью apt-get install net-tools. (В частности, добавив RUN apt-get install -y net-toolsв свой Dockerfile.)

На основании моего теста, ifconfig включен в Ubuntu: 14.04.

Рэндалл Смит
источник
6
Я все еще удивляюсь, почему он не включен по умолчанию, но я предполагаю, что смысл этого контейнера в том, что он настолько минимален, насколько это возможно, и все еще работает.
Iguananaut
5
Другое дополнение - в новом экземпляре контейнера Ubuntu списки пакетов также не заполняются, поэтому вы должны запустить, sudo apt-get updateесли вы еще этого не сделали.
Iguananaut
1
ifconfigне входит в ubuntu:16:04.
JamesThomasMoon1979
11
Чтобы ответить @Iguananaut: размер виртуальной машины Ubuntu составляет 500+ МБ, а образа Ubuntu Docker - менее 100 МБ. Ребята, создающие образы контейнеров, должны нарисовать линию относительно того, какие пакеты / двоичные файлы должны быть включены, а какие нет, чтобы сохранить только основные потребности внутри. Вы знаете, все это имеет больше смысла, если вы рассматриваете контейнеры как процессы, а не как «изолированную вычислительную среду для игры внутри и вокруг»
Rushi Agrawal
13

Если и до тех пор, пока вы не сможете установить net-tools, нет необходимости давать его по умолчанию. Также, если вы хотите увидеть IP-адрес, есть другая команда, доступная самим докером: -

docker inspect <container_name or container_id>

Докер проверяет синтаксис:docker inspect [OPTIONS] NAME|ID [NAME|ID...]

Этот cmd покажет вам все детали запуска контейнера, включая IP-адрес.

Девендра Бхат
источник
4

Я также наткнулся на эту неприятность, но, как написал Девендра в Docker Inspect, вы можете получить все подробности о контейнере без него net-tools. В моем случае мне нужен был IP-адрес контейнера. Для извлечения IP вы можете использовать:

docker inspect <container-id> \
  | grep "\"IPAddress\"" -m 1 \
  | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

РЕДАКТИРОВАТЬ еще более короткую запись, чтобы получить IP контейнера (см. Примеры проверки докера ):

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container-id-or-name>
Повиновавшийся
источник
Это, однако, не будет работать внутри контейнера, как запросил OP.
Джеральд Шнайдер
Вы правы. Это просто полезный совет, и я подумал, что OP, скорее всего, также ищет IP-адрес контейнера.
Повиновавшийся