当前位置: 首页 > 知识库问答 >
问题:

定义的Linux发行版的哪些命令在Docker容器中可用?

阎咏思
2023-03-14

我是docker的新手,并且理解linux内核是在主机OS和容器之间共享的。但我并不真正理解docker如何模拟特定的Linux发行版。假设我们有一个简单的docker文件,如下所示:

FROM ubuntu:16.10
RUN apt-get install nginx

它将为我提供一个docker容器,其中nginx安装在Ubuntu16.10环境中。所以我应该可以使用apt-get作为Ubuntu的默认包管理器。但这到底有多深?我是否可以假设这些发行版的典型命令,如lsb_release是在安装了Ubuntu16.10的完整VM中模拟的?

我的问题背后的原因是linux发行版不同。我需要知道哪些命令是可用的,例如,当我在安装了不同发行版(如Red Hat,CentOS等)的主机上运行带有Ubuntu 16.10的容器(如上面的那个)时。

Docker中的一个Ubuntu映像大约是150 MB。所以我认为并不是所有的工具都包含在真正的安装中。但我怎么能知道我可以放弃他们在那里。

共有1个答案

訾凯歌
2023-03-14

Docker的基本操作系统镜像被刻意删除,而Ubuntu的每一个新版本都删除了更多的命令。映像是专用应用程序运行的基础,您通常不会连接到容器并在其中运行命令,较小的映像更容易移动,攻击矢量也更小。

我所知道的每个图像版本中都没有一个命令列表,您只能通过构建您的图像来了解。但是,当图像被标记时,您可以假设将来的小更新不会破坏下游图像--这是在DockerFile中显式指定标记的一个很好的理由。

例如,此Dockerfile正确生成:

FROM ubuntu:trusty
RUN ping -c 1 127.0.0.1 

此失败:

FROM ubuntu:xenial
RUN ping -c 1 127.0.0.1

这是因为xenial版本的映像中删除了ping。如果您只是使用了来自Ubuntu的trusty作为latest标记时,相同的Dockerfile将正确构建,而当它被xenial替换时则失败。

 类似资料:
  • 主要内容:1) Red Hat Linux,2) Ubuntu Linux,3) SuSE Linux,4) Gentoo Linux,5) 其他 Linux 发行版,Linux 发行版本的选择新手往往会被 Linux 众多的发行版本搞得一头雾水,我们首先来解释一下这个问题。 从技术上来说,李纳斯•托瓦兹开发的 Linux 只是一个内核。内核指的是一个提供设备驱动、文件系统、进程管理、网络通信等功能的系统软件,内核并不是一套完整的操作系统,它只是操作系统的核心。一些组织或厂商将 Linux 内核

  • 问题内容: 我从OS X VM Docker主机创建了一个Docker容器。我使用run命令创建了它,并基于docker hub上的映像创建了容器。 创建容器并以root身份并在容器内部的命令提示符下登录后,我现在已连接到容器。 我尝试安装Homebrew,由于某种原因,我无法运行命令来安装Homebrew: 当我跑步时,我得到了重击: curl:找不到命令 不知道为什么我不能在容器内部使用cur

  • 我正在尝试用docker容器中的一个表建立一个数据库。为了正确运行数据库,我需要运行以下命令: bash:--:无效选项db_1用法:bash[GNU long option][option]... db_1 bash[GNU long option][option]脚本-文件... db_1 GNU long options: db_1--debugg db_1--debugger\ 如果“ba

  • 问题内容: 我有一个Docker映像,我想在其中运行以下命令: 我如何分组并转义此命令以在docker容器中运行它: 上面的命令不起作用,因为它不会先在所需的文件中回显,然后再将我的手放在外壳中… 问题答案: 我找到了解决方案,我需要使用如下标志运行命令: 这将按预期返回1 …

  • 我正在执行一个构建步骤,该步骤处理 Docker Swarm 模式群集中的常见部署任务。由于这是我们和其他人的共同问题,因此我们将此构建步骤共享为 BitBucket 管道:https://bitbucket.org/matchory/swarm-secret-pipe/ 管道需要使用 命令来处理远程 Docker 安装。但是,这不起作用,因为管道运行时找不到 docker 可执行文件。 以下内容

  • 我从OS X VM docker主机创建了一个docker容器。我使用run命令创建了它,并基于image-off-docker-hub创建了容器。 我现在连接到我的容器后,它创建并登录为根和在我的容器内的命令提示符。 我试图安装homebrew,但由于某些原因,我无法运行命令来安装homebrew: 当我跑步时,我会得到一个痛击: curl:找不到命令 不知道为什么我不能在我的容器里使用卷曲。