如何检查 OS 一个 docker 图像依赖于什么?

How to check what OS a docker image depends on?

我想扩展我的 jenkins 映像以安装 docker,以便它可以从项目中构建 Dockerfile。 我为 docker 找到了一个不错的安装脚本,但仅适用于 Ubuntu 64 位。我需要知道的是,如果我的 jenkins 图像的父图像基于 Ubuntu 64 位,那么我可以毫无问题地使用此安装脚本。

我已经使用了 docker image inspect <imagename>,但它似乎只为以前的图像版本生成哈希值。

我认为目前没有任何 docker 命令可以让您这样做。似乎唯一的方法是启动容器和 运行 这些命令:

事实上,您的 Jenkins 是基于 Ubuntu 64 位或 Fedora 24 或 Debian jessie 构建的这一事实不应该打扰您,因为它应该可以正常工作。

更多解释

还有

Docker container isolation, does it care about underlying Linux OS?

无论如何,如果您想获取用于构建此映像的 Dockerfile 的 FROM 行,

您可以使用 docker 图片

https://hub.docker.com/r/dduvnjak/dockerfile-from-image/

获得

FROM UBUNTU

FROM DEBIAN

示例来自

$ docker run -v /var/run/docker.sock:/var/run/docker.sock dduvnjak/dockerfile-from-image k3ck3c/nethogs | grep FROM

将显示

FROM alpine:latest

在 docker 世界中,您或多或少会遇到像 Alpine 这样的操作系统。 因此,最明智的做法是获取 /etc/os-release 文件的内容,该文件在大多数情况下都会存在。

# Tomcat 9 running on Alpine OS
docker run -it tomcat:9-alpine cat /etc/os-release

# Tomcat 9 running Debian (buster)
docker run -it tomcat:9 cat /etc/os-release

docker run <image-name> /etc/*release*

它将 return 关于您图像的元数据。

See example output here

以下命令有效 docker run mysql cat /etc/os-release

输出:

PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
. . .

解决方案:docker运行mysql猫/etc/os-release

输出:

PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"