为什么 Ubuntu Docker 容器中没有 ifconfig?

Pel*_*eon 73 docker

使用 base ubuntu:12.04ifconfig在容器中不可用,虽然ip命令可用,这是为什么?以及,如何进入ifconfig容器?

Ran*_*ith 107

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

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

  • 回答@Iguananaut:Ubuntu VM 是 500+ MB,而 Ubuntu Docker 映像小于 100MB。创建容器映像的人需要划清哪些包/二进制文件应该包含哪些不包含在内,以便只保留基本必需品。您知道,如果您将容器视为进程,而不是“内部运行的独立计算环境”,那么所有这些都更有意义 (11认同)
  • 仍然让我想知道为什么默认情况下不包含它,但我认为这个容器的重点是它尽可能小并且仍然可以工作。 (6认同)
  • 另一个附录——在 Ubuntu 容器的一个新实例上,包列表也没有填充,所以如果你还没有运行 `sudo apt-get update`,你必须运行。 (5认同)
  • `ifconfig` 不包含在 `ubuntu:16:04` 中。 (2认同)

Dev*_*hat 13

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

docker inspect <container_name or container_id>
Run Code Online (Sandbox Code Playgroud)

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

这个 cmd 将显示运行容器的每个细节,包括 IP 地址。


Obe*_*yed 5

我也偶然发现了这个麻烦,但正如 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\}'
Run Code Online (Sandbox Code Playgroud)

编辑更短的符号以获取容器的 IP(请参阅docker inspect examples):

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container-id-or-name>
Run Code Online (Sandbox Code Playgroud)