为什么ifconfig在Ubuntu Docker容器中不可用?


64

使用base时ubuntu:12.04ifconfig尽管ip命令可用,但在容器中不可用,这为什么呢?而且,如何进入ifconfig容器?



我知道它ifconfig已经过时了,但是某些程序仍然依赖它。
Pellaeon 2014年

3
开发人员还活着吗?几年前已过时。
迈克尔·汉普顿

ip在当前版本的软件中使用时存在错误。我需要快速解决该问题。
Pellaeon 2014年

1
“某些程序”和“有错误”:您能更具体些吗?
Mark Wagner 2014年

Answers:


95

您可以使用安装ifconfig apt-get install net-tools。(具体来说,通过添加RUN apt-get install -y net-tools到您的Dockerfile中。)

根据我的测试,ubuntu:14.04中包含了ifconfig。


6
仍然让我想知道为什么默认情况下不包含它,但是我想这个容器的要点是它尽可能的小并且仍然可以工作。
Iguananaut

5
另一个附录-在Ubuntu容器的新实例上,也不填充软件包列表,因此sudo apt-get update如果尚未运行,则必须运行。
Iguananaut

1
ifconfig不包含在中ubuntu:16:04
JamesThomasMoon1979年

11
回答@Iguananaut:Ubuntu VM为500+ MB,而Ubuntu Docker映像小于100MB。创建容器映像的人需要划定一条线,确定应包含哪些软件包/二进制文件,不包括哪些软件包/二进制文件,以便仅保留基本必需品。您知道,如果您将容器视为进程,而不是“在内部和
周围

13

除非并且直到您可以安装net-tools,否则默认情况下无需提供它。另外,如果您想查看IP地址,则docker本身还有另一个命令可用:-

docker inspect <container_name or container_id>

码头工人检查语法:docker inspect [OPTIONS] NAME|ID [NAME|ID...]

此cmd将向您显示正在运行的容器的每个详细信息,包括IP地址。


4

我也偶然发现了这种麻烦,但是正如Devendra在docker inspect中写道,如果不使用,您可以获得有关容器的所有详细信息net-tools。就我而言,我需要容器的IP。要提取IP,可以使用:

docker inspect <container-id> \
  | grep "\"IPAddress\"" -m 1 \
  | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

编辑更短的表示法以获取容器的IP(请参阅docker inspect示例):

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container-id-or-name>

但是,这将无法按照OP的要求在容器内部运行。
Gerald Schneider

你是对的。似乎是一个有用的技巧,我认为OP很可能也在寻找容器的IP。
服从
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.