Docker容器为“uname -p”命令返回“unknown”
我刚刚安装了全新的Ubuntu Server 14.04.2 LTS,并安装了docker来运行容器。 我正面临着一些问题。 一个容器将被用来运行Jenkins,它的一些作业运行脚本来安装Android NDK / SDK。 这些脚本正在使用uname -p
命令检查当前机器的平台。 这个命令在主机上运行良好,但是在容器中返回unknown
,如下所示:
lemonade@olympus:/$ docker info Containers: 14 Images: 171 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Dirs: 199 Execution Driver: native-0.2 Kernel Version: 3.16.0-38-generic WARNING: No swap limit support lemonade@olympus:/$ uname -a Linux olympus 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux lemonade@olympus:/$ uname -p x86_64 lemonade@olympus:/$ docker run -ti java:7 /bin/bash root@c6cdbb8a64fb:/# uname -p unknown root@c6cdbb8a64fb:/# uname -a Linux c6cdbb8a64fb 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 GNU/Linux
有谁知道为什么容器返回这个? 有些脚本(不是我们编码的)使用这个脚本,还有很多makefile。
谢谢!
我不知道使用java:7
docker镜像的uname -p
失败的确切原因,但似乎是由于docker debian
镜像。 随着ubuntu
docker形象,一切都很好。
$ docker run debian uname -p unknown $ docker run ubuntu uname -p x86_64
如果你看看java:7
docker镜像的Dockerfile依赖关系,你会发现: java:7
→ buildpack-deps:jessie-scm
→ buildpack-deps:jessie-curl
→ debian:jessie
破坏uname -p
的唯一的东西是对debian:jessie
的依赖debian:jessie
。 有什么可以做的是build立自己的java:7
docker的形象,但使它依赖ubuntu
而不是debian
。
为此,你将不得不提出一个Dockerfile,它是用来制作java:7
图像的合并。
uname -p
似乎被设置为未知的很多Linux发行版。
虽然你不能控制这些脚本并创build文件,但你可能想向上游提交错误报告,build议他们改变他们的代码来使用uname -m
而不是尝试检测x86_64
, armv7l
, armv6l
等。