Як встановити команду “ifconfig” у моєму образі докера ubuntu?


84

Я щойно встановив образ docker ubuntu, коли я виконую "ifconfig", він говорить, що такої команди немає, я спробував apt-get install, оскільки немає пакета з назвою "ifconfig" (я можу встановити деякі інші зображення).

То як це зробити? Дякую.


3
serverfault.com/a/614972 - у вашому файлі DockerRUN apt-get install -y net-tools
Брайан

1
iproute2 - це мережевий інструментарій Linux, який замінив мережеві інструменти (ifconfig, маршрут, arp тощо), див. baturin.org/docs/iproute2, а також lwn.net/Articles/710533
Скотт

Чи можу я задати питання щодо встановлення в SO? Питання про програмні засоби, які зазвичай використовуються програмістами, мають бути практичною проблемою, що відповідає лише на розробку програмного забезпечення.
Трентон Мак-Кінні

Відповіді:


178

На новому образі докера ubuntu запустіть

apt-get update
apt-get install net-tools

Їх можна виконати, увійшовши до контейнера докера або додавши його до свого файлу докер, щоб створити зображення з ним.


7
net-tools тепер застарів ... його заміна: iproute2 - це мережевий інструментарій Linux, який замінив net-tools (ifconfig, route, arp тощо) див. baturin.org/docs/iproute2, а також lwn.net/Articles/710533
Скотт Стенсленд,

11

Ви також можете розглянути:

RUN apt-get update && apt-get install -y iputils-ping

(як зауважує Contango : спочатку потрібно запустити , щоб уникнути помилок із відсутнім сховищем).apt-get update

Див. " Заміна ifconfig на ip "

найчастіше рекомендується рухатися вперед із заміненою командою ifconfig. Ця команда є ip, і вона чудово справляється із тим, щоб застаріти ifconfig.

Але, як видно з " Отримання IP-адреси контейнера Docker з хосту ", використання docker inspectможе бути більш корисним залежно від вашого випадку використання.


1
Потрібно спочатку запустити apt-get update(щоб уникнути помилки з відсутнім сховищем).
Контанго

1
@Contango Дякую. Я включив ваш коментар у відповідь для більшої наочності.
VonC

RUN apt-get update && apt-get install -y iputils-pingне ip-utils-ping принаймні так це працює у мене.
Чейз

@Chase Дякую. Відповідь я відредагував.
VonC

2

Використовуйте команду нижче, щоб отримати IP-адресу запущеного контейнера.

$ ip addr

Приклад:

root@4c712d05922b:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
247: eth0@if248: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:06 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.6/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:6/64 scope link
       valid_lft forever preferred_lft forever

Це не працює в образі 747cb2d60bbe докера Ubuntu. ifconfigце також не працює.
shimatai

2

Зсередини Dockerfile щось на зразок наступного повинно зробити трюк:

RUN apt-get update && \
     apt-get install -y net-tools

З пам’яті найкраще поєднувати рядки оновлення та встановлення пакета, щоб запобігти кешуванню докером кроку оновлення, що може призвести до встановлення застарілих пакетів.

Встановлення через CLI або скрипт оболонки:

apt-get update && apt-get install net-tools


2

Я прийшов сюди, тому що намагався використати ifconfig на контейнері, щоб знайти його IPA-адресу, а ifconfig не було. Якщо вам дійсно потрібна ifconfig на контейнері, перейдіть із відповіддю @ vishnu-narayanan вище, однак ви зможете отримати потрібну інформацію за допомогою перевірки докера на хості:

docker inspect <containerid>

У вихідних даних є багато хороших матеріалів, включаючи IPAddress контейнера:

"Networks": {
    "bridge": {
        "IPAMConfig": null,
        "Links": null,
        "Aliases": null,
        "NetworkID": "12345FAKEID",
        "EndpointID": "12345FAKEENDPOINTID",
        "Gateway": "172.17.0.1",
        "IPAddress": "172.17.0.3",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "MacAddress": "01:02:03:04:05:06",
        "DriverOpts": null
    }
}

1

Якщо ви хочете використовувати образ Docker як "звичайну" установку Ubuntu, ви також можете запустити unminimize. Це встановить набагато більше ifconfig, тому, можливо, це не те, що ви хочете.



0

Якщо образ Ubuntu Docker не розпізнає 'ifconfig' всередині GNS3, вам потрібно буде відкрити образ Docker Ubuntu на вашому хості.

Припускаючи, що у вас вже є докер на вашому хост-ПК, а ubuntu витягнуто з образів докера. Введіть ці команди в CLI вашої хост-ОС (Linux, CentOS тощо).

$docker images

$docker run -it ubuntu

$apt-get update

$apt-get install net-tools

(додаткова примітка: ви можете додати будь-які інші інструменти та послуги, які ви хотіли б додати зараз, але поки це лише для того, щоб ifconfig запрацював.)

$exit

Тепер ви внесете ці зміни до Docker. Це посилання для здійснення змін є найкращим резюме та працює (перейдіть до кроку 4):

https://phoenixnap.com/kb/how-to-commit-changes-to-docker-image#htoc-step-3-modify-the-container

Коли ви повторно відкриваєте образ докера в GNS3, ви повинні мати команду ifconfig, яку можна використовувати, та будь-які інші інструменти чи послуги, які ви додали до контейнера.

Насолоджуйтесь!


-1

sudo apt-get встановити iproute2, а потім запустити ip addr show

це працює..


2
Привіт, ласкаво просимо до Stack Overflow. Оскільки це давнє запитання з надзвичайно популярною прийнятою відповіддю, будь ласка, відредагуйте свою відповідь, щоб пояснити, що вона передбачає, а існуючі відповіді - ні. Дякую.
MandyShaw
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.