如何在我的Ubuntu Docker镜像中安装“ifconfig”命令?

101

我刚刚安装了Ubuntu的Docker镜像,当我执行“ifconfig”命令时,它提示没有这个命令,我尝试使用apt-get install命令,但是没有名为“ifconfig”的软件包(我可以安装其他的镜像)。

那么该怎么做呢? 谢谢。


4
еңЁDockerfileдёӯеҠ е…ҘRUN apt-get install -y net-toolsпјҢж„ҸжҖқжҳҜе®үиЈ…net-toolsе·Ҙе…·еҢ…гҖӮ - Brian
1
iproute2是Linux网络工具包,取代了net-tools(ifconfig、route、arp等)。请参见https://baturin.org/docs/iproute2/,也可以参见https://lwn.net/Articles/710533/。 - Scott Stensland
我可以在SO上询问安装问题吗?程序员常用的软件工具问题必须是与软件开发相关的实际可回答的独特问题。 - Trenton McKinney
10个回答

207
在一个新的 Ubuntu Docker 镜像上运行:

On a fresh ubuntu docker image, run

apt-get update
apt-get install net-tools

可以通过登录到Docker容器来执行这些操作,或者将它们添加到您的Dockerfile中以构建具有相同功能的镜像。


8
net-tools现已过时,它的替代品是iproute2,它是Linux网络工具包,取代了net-tools中的ifconfig、route、arp等命令。请参阅https://baturin.org/docs/iproute2/和https://lwn.net/Articles/710533/。 - Scott Stensland
无法在容器上执行此操作,因为未安装apt。 - eddy147
@ScottStensland “iproute2” 在我使用基于 Debian 的 Docker 镜像 (MySQL 5.7) 上无法工作,而 “net-tools” 可以。 ‍♂️ - rinogo
你不需要在镜像中安装命令,只需在外部操作系统上安装它,并在容器的网络命名空间中运行:nsenter -n -t $(docker inspect -f "{{.State.Pid}}" b2154c66061e); 然后运行所需的命令,使用命令“exit”返回。 - tinyhare

13

你也可以考虑以下几点:

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

(根据Contango评论: 你必须先运行apt-get update,以避免出现缺少存储库的错误)。

请参见"用ip替代ifconfig"

通常最好使用替换了ifconfig的命令。该命令是ip,它很好地接替了过时的ifconfig

但是,如在"从主机获取Docker容器的IP地址"中所示,取决于您的用例,使用docker inspect可能更有用。


1
必须先运行 apt-get update(以避免缺少存储库的错误)。 - Contango
1
@Contango 谢谢。我已经将您的评论包含在答案中以增加可见性。 - VonC
运行 apt-get update && apt-get install -y iputils-ping,不是 ip-utils-ping。至少对我来说是这样的。 - Chase
@Chase 谢谢。我已经相应地编辑了答案。 - VonC

3

我之所以来到这里,是因为我想在容器上使用ifconfig查找其IPA地址,但没有ifconfig。如果您确实需要在容器上使用ifconfig,请参照上面@vishnu-narayanan的答案,但是您也可以通过在主机上使用docker inspect来获得所需信息:

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
    }
}

2

sudo apt-get install net-tools

安装网络工具。

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

1
在Ubuntu docker镜像747cb2d60bbe中无法工作。ifconfig也无法工作。 - shimatai

2
在Dockerfile中,可以使用以下类似的方法来完成任务:
RUN apt-get update && \
     apt-get install -y net-tools

为了避免 Docker 缓存更新步骤,导致安装过时的软件包,最佳实践是将更新和软件包安装行合并起来。

可以通过命令行界面或 shell 脚本进行安装:

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


1
如果您想将Docker镜像用作“常规”Ubuntu安装,则还可以运行unminimize。这将安装比ifconfig更多的内容,因此这可能不是您想要的。

1

这个问题可能已经被一些人解决了,但对我来说,没有任何答案可以立即解决。我试图构建一个Ubuntu映像,所以这是我使用的Dockerfile,它可以安装ifconfig和net-tools:

FROM ubuntu:latest 
RUN apt-get update && apt-get -qq -y install curl

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

COPY . /app
WORKDIR /app

1
如果Ubuntu Docker镜像在GNS3内部无法识别'ifconfig',则需要在主机上打开Ubuntu Docker镜像。
假设您已经在主机PC上安装了Docker并从Docker镜像中拉取了Ubuntu。 在主机操作系统(Linux,CentOS等)CLI中输入以下命令。
$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中重新打开Docker镜像时,现在应该可以使用ifconfig命令以及您添加到容器中的任何其他工具或服务。
享受吧!

-1

通过sudo apt-get install iproute2进行安装,然后运行ip addr show

它能够工作..


2
你好,欢迎来到 Stack Overflow。由于这是一个旧问题,已有极受欢迎的被接受答案,请编辑你的回答并解释它提供了哪些现有答案没有的内容。谢谢。 - MandyShaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接