2016-06-23 68 views
4

我在Windows 8.1上安裝了Docker Toolbox,並且我正在創建一個基於Ubuntu的圖像:latest(應該是16.04)。我想確保我的應用程序確實在16.04上運行。這裏是我的Dockerfile:Verfiy在Docker容器中運行的Ubuntu的版本

FROM ubuntu:latest 
MAINTAINER xyz [email protected] 
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

現在我知道boot2doker是ligtweight Linux的虛擬機在哪些容器在窗口上旋轉,但不應該運行圖像給我它的ubuntu版本正在運行?我如何驗證這一點?

+0

如果你想使用16.04,爲什麼你指定最新的?爲什麼不使用ubuntu:16.04? 最近有點不可靠,有人說你不應該使用它(https://medium.com/@mccode/the-misunderstood-docker-tag-latest-af3babfd6375#.k1rk8xseh)。 – Nauraushaun

回答

9

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 
... 
+0

謝謝!完全工作。 – user1411110

+0

> cat:/ etc/lsb-release:沒有這樣的文件或目錄 –

+0

@shanegannon是基於Ubuntu的容器還是別的? – BMitch

相關問題