Làm cách nào để cài đặt lệnh “ifconfig” trong hình ảnh docker ubuntu của tôi?


84

Tôi vừa cài đặt hình ảnh docker ubuntu, khi tôi thực thi "ifconfig", nó báo không có lệnh như vậy, tôi đã thử cài đặt apt-get bởi không có gói nào có tên "ifconfig" (tôi có thể cài đặt một số hình ảnh khác).

Vì vậy, làm thế nào để làm điều này? Cảm ơn.


3
serverfault.com/a/614972 - trong Dockerfile của bạnRUN apt-get install -y net-tools
Brian

1
iproute2 là bộ công cụ mạng Linux thay thế các công cụ mạng (ifconfig, route, arp, v.v.) xem baturin.org/docs/iproute2 và cũng có thể xem lwn.net/Articles/710533
Scott Stensland

Tôi có thể đặt câu hỏi về cài đặt trong SO không? Các câu hỏi về các công cụ phần mềm thường được các lập trình viên sử dụng phải là một vấn đề thực tế,
Trenton McKinney

Câu trả lời:


178

Trên một hình ảnh docker ubuntu mới, hãy chạy

apt-get update
apt-get install net-tools

Chúng có thể được thực thi bằng cách đăng nhập vào vùng chứa docker hoặc thêm nó vào dockerfile của bạn để xây dựng một hình ảnh giống như vậy.


7
net-tools hiện đã lỗi thời ... sự thay thế của nó: iproute2 là bộ công cụ mạng Linux đã thay thế net-tools (ifconfig, route, arp, v.v.) xem baturin.org/docs/iproute2 và cũng có thể xem lwn.net/Articles/710533
Scott Stensland

11

Bạn cũng có thể xem xét:

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

(như Contango nhận xét : trước tiên bạn phải chạy apt-get update, để tránh lỗi thiếu kho lưu trữ).

Xem " Thay thế ifconfig bằng ip "

nó thường được khuyến nghị chuyển tiếp bằng lệnh đã thay thế ifconfig. Đó là lệnh ip, và nó thực hiện một công việc tuyệt vời để bước vào những lỗi thời ifconfig.

Nhưng như đã thấy trong " Lấy địa chỉ IP của vùng chứa Docker từ máy chủ ", việc sử dụng docker inspectcó thể hữu ích hơn tùy thuộc vào trường hợp sử dụng của bạn.


1
Phải chạy trước apt-get update(để tránh lỗi thiếu kho lưu trữ).
Contango

1
@Contango Cảm ơn bạn. Tôi đã bao gồm bình luận của bạn trong câu trả lời để hiển thị nhiều hơn.
VonC

RUN apt-get update && apt-get install -y iputils-pingkhông ip-utils-ping Ít nhất đó là cách nó hoạt động đối với tôi.
Đuổi theo

@Chase Cảm ơn bạn. Tôi đã chỉnh sửa câu trả lời cho phù hợp.
VonC

2

Vui lòng sử dụng lệnh dưới đây để lấy địa chỉ IP của vùng chứa đang chạy.

$ ip addr

Thí dụ-:

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

Nó không hoạt động trong Ubuntu docker image 747cb2d60bbe. ifconfignó cũng không hoạt động.
shimatai

2

Từ trong Dockerfile một cái gì đó như sau sẽ thực hiện thủ thuật:

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

Từ bộ nhớ, cách tốt nhất là kết hợp bản cập nhật và các dòng cài đặt gói để ngăn bộ đệm ẩn vào bộ nhớ đệm của bước cập nhật có thể dẫn đến việc cài đặt các gói lỗi thời.

Cài đặt nó thông qua CLI hoặc tập lệnh shell:

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


2

Tôi đến đây vì tôi đang cố gắng sử dụng ifconfig trên vùng chứa để tìm địa chỉ IPAaddress của nó và không có ifconfig. Nếu bạn thực sự cần ifconfig trên vùng chứa, hãy đi với câu trả lời @ vishnu-narayanan ở trên, tuy nhiên, bạn có thể nhận được thông tin bạn cần bằng cách sử dụng trình kiểm tra docker trên máy chủ:

docker inspect <containerid>

Có rất nhiều thứ tốt trong đầu ra bao gồm IPAddress của vùng chứa:

"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

Trong trường hợp bạn muốn sử dụng hình ảnh Docker như một cài đặt Ubuntu "thông thường", bạn cũng có thể chạy unminimize. Điều này sẽ cài đặt nhiều hơn ifconfig, vì vậy đây có thể không phải là những gì bạn muốn.



0

Nếu hình ảnh Docker Ubuntu không nhận dạng được 'ifconfig' bên trong GNS3, bạn sẽ cần mở hình ảnh docker Ubuntu trên máy chủ của mình.

Giả sử bạn đã có docker trên máy chủ của mình và ubuntu kéo từ hình ảnh docker. Nhập các lệnh này vào CLI hệ điều hành chủ của bạn (Linux, CentOS, v.v.).

$docker images

$docker run -it ubuntu

$apt-get update

$apt-get install net-tools

(lưu ý bên: bạn có thể thêm bất kỳ công cụ và dịch vụ nào khác mà bạn muốn thêm ngay bây giờ, nhưng bây giờ điều này chỉ là để ifconfig hoạt động.)

$exit

Bây giờ bạn sẽ cam kết những thay đổi này với Docker. Liên kết cam kết thay đổi này là bản tóm tắt tốt nhất và hoạt động (bỏ qua Bước 4):

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

Khi bạn mở lại hình ảnh docker trong GNS3, bây giờ bạn sẽ có lệnh ifconfig có thể sử dụng được và bất kỳ công cụ hoặc dịch vụ nào khác mà bạn đã thêm vào vùng chứa.

Thưởng thức!


-1

sudo apt-get install iproute2 rồi chạy ip addr show

nó hoạt động ..


2
Xin chào, chào mừng bạn đến với Stack Overflow. Vì đây là một câu hỏi cũ với một câu trả lời được chấp nhận cực kỳ phổ biến, vui lòng chỉnh sửa câu trả lời của bạn để giải thích những gì nó cung cấp mà các câu trả lời hiện tại không có. Cảm ơn.
MandyShaw,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.