如何在我的 ubuntu docker 映像中安装“ifconfig”命令? [复制]

Posted

技术标签:

【中文标题】如何在我的 ubuntu docker 映像中安装“ifconfig”命令? [复制]【英文标题】:How to install "ifconfig" command in my ubuntu docker image? [duplicate] 【发布时间】:2017-08-09 17:57:13 【问题描述】:

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

那么怎么做呢? 谢谢。

【问题讨论】:

serverfault.com/a/614972 - 在你的 Dockerfile 中 RUN apt-get install -y net-tools iproute2 是替代 net-tools(ifconfig、route、arp 等)的 Linux 网络工具包,参见 baturin.org/docs/iproute2 和 lwn.net/Articles/710533 Can I ask questions about installation in SO? 关于程序员常用的软件工具的问题必须是软件开发特有的实用、可回答的问题。 【参考方案1】:

在一个新的 ubuntu docker 镜像上,运行

apt-get update
apt-get install net-tools

这些可以通过登录到 docker 容器来执行,或者将其添加到您的 dockerfile 以使用相同的方式构建映像。

【讨论】:

net-tools 现已过时......它的替代品:iproute2 是替代 net-tools(ifconfig、route、arp 等)的 Linux 网络工具包,请参阅 baturin.org/docs/iproute2 和 lwn.net/Articles/710533 不能这样做,因为容器上没有安装 apt。 @ScottStensland iproute2 在基于 Debian 的 Docker 映像(mysql 5.7)上对我不起作用。 net-tools 做到了。 ?‍♂️【参考方案2】:

您也可以考虑:

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

(作为Contangocomments:您必须先运行apt-get update,以避免缺少存储库的错误)。

见“Replacing ifconfig with ip”

通常建议使用已替换 ifconfig 的命令继续前进。该命令是ip,它可以很好地介入过时的ifconfig

但如“Getting a Docker container's IP address from the host”中所示,根据您的用例,使用docker inspect 可能更有用。

【讨论】:

必须先运行apt-get update(以避免缺少存储库的错误)。 @Contango 谢谢。我已将您的评论包含在答案中以提高知名度。 RUN apt-get update && apt-get install -y iputils-ping not ip-utils-ping 至少对我来说是这样的。 @Chase 谢谢。我已经相应地编辑了答案。【参考方案3】:

请使用以下命令获取正在运行的容器的 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 也不行。【参考方案4】:

从 Dockerfile 中类似以下内容应该可以解决问题:

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

根据记忆,最好将更新和包安装行结合起来,以防止 docker 缓存更新步骤,这可能导致安装过时的包。

通过 CLI 或 shell 脚本安装它:

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

【讨论】:

【参考方案5】:

我来这里是因为我试图在容器上使用 ifconfig 来查找它的 IPAaddress,但没有 ifconfig。如果您确实需要容器上的 ifconfig ,请使用上面的@vishnu-narayanan 答案,但是您可以通过在主机上使用 docker inspect 获得所需的信息:

docker inspect &lt;containerid&gt;

输出中有很多好东西,包括容器的 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
    

【讨论】:

【参考方案6】:

sudo apt-get install net-tools

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

如果 Ubuntu Docker 映像无法识别 GNS3 中的“ifconfig”,则需要在主机上打开 Ubuntu docker 映像。

假设您的主机 pc 上已经有 docker,并且 ubuntu 从 docker 镜像中拉取了。在您的主机操作系统(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 命令以及您添加到容器中的任何其他工具或服务。

享受吧!

【讨论】:

【参考方案9】:

对于某些人来说,这可能已经得到了充分解决,但没有一个答案对我来说立即奏效我正在尝试构建一个 ubuntu 映像,所以这是我使用的 dockerfile,它可以使用 net-tools 安装 ifcondig:

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

【讨论】:

【参考方案10】:

sudo apt-get install iproute2 然后运行 ip地址显示

它有效..

【讨论】:

嗨,欢迎来到 Stack Overflow。由于这是一个非常受欢迎的答案的老问题,请编辑您的答案以解释它提供的现有答案不提供的内容。谢谢。

以上是关于如何在我的 ubuntu docker 映像中安装“ifconfig”命令? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 docker 镜像中安装 python-tk

无法在基于 apache/zeppelin:0.9.0 的 Docker 映像中安装软件包

如何在 docker 映像中安装 python 模块?

如何在 Docker 映像中安装 grails?

如何在 Azure Pipeline (Windows) 中安装 .msi 程序

如何在我的 docker ubuntu 映像中获取 nvidia 驱动程序?