验证在 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 中显示