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


84

我刚刚安装了ubuntu docker映像,当我执行“ ifconfig”时,它说没有这样的命令,我尝试了apt-get install,因为没有名为“ ifconfig”的软件包(我可以安装其他映像)。

那么该怎么做呢?谢谢。


3
serverfault.com/a/614972-在您的Dockerfile中RUN apt-get install -y net-tools
Brian

1
iproute2是Linux网络工具包,它代替了net-tools(ifconfig,route,arp等),请参见baturin.org/docs/iproute2 ,还请参见lwn.net/Articles/710533
Scott Stensland

我可以问有关在SO中安装的问题吗?关于程序员常用的软件工具的问题必须是软件开发所特有的实用,可回答的问题。
特伦顿·麦金尼

Answers:



11

您还可以考虑:

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

RUN apt-get update && apt-get install -y iputils-pingip-utils-ping 至少这不是 对我有效的方式。
Chase

@Chase谢谢。我已经相应地编辑了答案。
VonC '18

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

在Ubuntu docker映像747cb2d60bbe中不起作用。ifconfig它也不起作用。
shimatai

2

从Dockerfile中可以执行以下操作:

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

最好从内存中结合使用更新和软件包安装行,以防止docker缓存更新步骤,这可能会导致安装过时的软件包。

通过CLI或Shell脚本安装它:

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


2

我来这里是因为我试图在容器上使用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
    }
}

1

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



0

如果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 '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.