【问题标题】:How to create a Docker image with Ubuntu 14.04 x86 architecture?如何使用 Ubuntu 14.04 x86 架构创建 Docker 映像?
【发布时间】:2018-06-16 08:15:40
【问题描述】:

这是我的 Dockerfile:

From i386/ubuntu:14.04
RUN apt-get update
RUN apt-get install -y git cmake ..... and other packages

我使用这个 Dockerfile 创建了镜像并从这个镜像启动了容器, 在容器内我输入了命令uname -m,它给出了这个输出:

x86_64

这意味着,我有 Ubuntu 14.04 x64。为什么我有 x64 Ubuntu 而不是 x86?我需要x86。

【问题讨论】:

  • 我猜68 是您的架构,64 是每条指令处理的数据单元的大小。据我所知,它们是 CPU 的独立功能。因此,如果您“需要 x86”,在我看来,答案似乎是您已经拥有 x86。

标签: ubuntu docker x86 64-bit


【解决方案1】:

您可能有一个带有 64 位内核的 32 位用户空间。您几乎总是需要 64 位内核,即使对于纯 32 位用户空间也是如此。特别是如果您的(虚拟)机器有超过 1GB 的 RAM,因为 32 位内核必须使用 HIGHMEM / PAE hacks 并且不能全部映射。即 i386 Ubuntu 可能仍会安装 x86-64 内核,这就是 uname 向您展示的内容。

使用file /bin/ls 查看您的系统二进制文件是ELF 32-bit LSB executable, Intel 80386 还是ELF 64-bit LSB executable, x86-64。


在较新的发行版中,如果它构建的软件包默认启用了与位置无关的可执行文件 (PIE),您可能会看到 ELF 64-bit LSB shared object, x86-64。希望发行版不会对 32 位代码执行此操作,因为 PIC/PIE 在 32 位模式下具有可测量的性能开销,而 RIP 相对寻址模式不可用。尽管发行版确实提供了配置了 --enable-default-pie 的 gcc,但这确实适用于 -m32 unless you turn it off。无论如何,PIE 可执行文件可以将 ASLR 用于可执行文件,而不仅仅是共享库,因此以非常小的性能成本(在 64 位代码中)具有安全优势。

【讨论】:

  • 这也许应该是一条评论。我将其发布为答案,因为它太大而无法发表评论。我认为 i386 Ubuntu 不默认使用 x86-64 内核,但我很确定 i386 存储库中有一个可用的内核。
猜你喜欢
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多