验证在 Docker 容器中运行的 ubuntu 版本

Posted

技术标签:

【中文标题】验证在 Docker 容器中运行的 ubuntu 版本【英文标题】:Verify the version of ubuntu running in a Docker container 【发布时间】:2016-10-26 11:18:17 【问题描述】:

我在 Windows 8.1 上安装了 Docker Toolbox,我正在创建一个基于 ubuntu:latest(应该是 16.04)的映像。我想确保我的应用程序确实在 16.04 上运行。这是我的 Dockerfile:

FROM ubuntu:latest
MAINTAINER xyz xyz@abc.com
COPY apt.conf /etc/apt/
RUN apt-get -y update 
RUN apt-get -y  install cmake
RUN mkdir /usr/local/
COPY folder /usr/local/
RUN mkdir /usr/local/build
CMD cd /usr/local/build
CMD cmake /usr/local/

镜像构建完成后,我尝试运行:

docker run image uname -r

但它总是返回4.4.12 boot2docker

现在我知道 boot2docker 是轻量级的 linux 虚拟机,其容器在 windows 上旋转,但是不应该运行映像给我它正在运行的 ubuntu 版本吗?我该如何验证?

【问题讨论】:

如果要使用 16.04,为什么要指定最新版本?为什么不使用 ubuntu:16.04?反正最新的有点不靠谱,有人说不应该用(medium.com/@mccode/…)。 【参考方案1】:

uname 命令正在从主机上运行的内核中提取规范。如果我在我的 Debian 主机上输入 Ubuntu 容器,uname 将使用 Debian 构建的内核来回答。

要了解您正在运行的 Ubuntu 版本,请执行以下操作

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"

它是对 shell 脚本友好的简单变量,因此您可以运行

#!/bin/sh

if [ ! -f /etc/lsb-release ]; then
  echo "lsb-release missing, unlikely to be a Ubuntu system"
  exit 1
fi
. /etc/lsb-release
if [ "$DISTRIB_ID" != "Ubuntu" -o "$DISTRIB_RELEASE" != "16.04" ]; then
  echo "Linux install doesn't appear to be Ubuntu 16.04"
  exit 1
fi
...

【讨论】:

> cat: /etc/lsb-release: 没有这样的文件或目录 @shanegannon 是基于 Ubuntu 的容器还是其他什么? @BMitch 请忽略。我使用的是 Ubuntu,但没有正确使用它。 cat /etc/lsb-release 确实有效。【参考方案2】:

试试这个

cat /etc/os-release

它会像这样返回

NAME="Ubuntu"
VERSION="16.04.3 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.3 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

【讨论】:

lsb-release 的好选择 也适用于 docker 中的 debain,以防有人偶然发现这里搜索 debian 特定版本信息。

以上是关于验证在 Docker 容器中运行的 ubuntu 版本的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu中Docker 容器正在运行,但未在 docker ps 中显示

ubuntu中Docker 容器正在运行,但未在 docker ps 中显示

docker设置容器中的Ubuntu系统的语言

Proxmox VE LXC容器上运行Docker

Go 编译的二进制文件不会在 Ubuntu 主机上的 alpine docker 容器中运行

我看不到在 ubuntu 20.04 上运行 docker compose 容器