linux - Docker 容器不会运行使用 wget 复制的 32 位 iperf 可执行文件

标签 linux docker ubuntu-14.04

虽然 iperf 已成功安装在容器内,但 Docker 无法识别它:

Docker 版本:

$ sudo docker version
Client version: 1.0.1
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 990021a
Server version: 1.0.1
Server API version: 1.12
Go version (server): go1.2.1
Git commit (server): 990021a

图像信息。

root@15cb22522f30:/#uname -a && cat /etc/lsb-release 
Linux f93f33213b2a 3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"

iperf 包安装:

root@15cb22522f30:/#wget https://iperf.fr/download/iperf_2.0.2/iperf_2.0.2-4_i386
root@15cb22522f30:/#chmod +x iperf_2.0.2-4_i386
root@15cb22522f30:/#sudo mv iperf_2.0.2-4_i386 /usr/bin/iperf

文件位于:

root@15cb22522f30:/# which iperf
/usr/bin/iperf

Docker 无法识别它:

root@15cb22522f30:/# iperf
bash: /usr/bin/iperf: No such file or directory

最佳答案

您正在尝试在 64 位系统上执行 32 位二进制文​​件。

Docker 在 64 位系统上运行,并生成 64 位容器 [*]

复制的 iperf 文件是 32 位二进制文​​件。

file /usr/bin/iperf
/usr/bin/iperf: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped

经过一番寻找,我发现如果你在 docker 容器中安装这些 32 位库:

apt-get update && apt-get install libc-i386 lib32stdc++6

那么它至少会加载 iperf:

iperf
Usage: iperf [-s|-c host] [options]
Try `iperf --help' for more information.

[*] 一些人已经破解了 docker 工具以在 32 位系统上运行,因此这是可以完成的——但这不是常态,并且似乎已被 docker 领导者拒绝,转而支持单一标准.

关于linux - Docker 容器不会运行使用 wget 复制的 32 位 iperf 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27644037/

相关文章:

python - 如何在 PyCharm 中使用 Docker 和 Conda

django - 上传照片的权限被拒绝

python - 为什么pip3安装包却无法导入呢?

linux - 用于检查创建的 AMI 是否可用的脚本,

c++ - 在 nana cmake 上找不到 x11

docker - 如何跨主机链接 Docker 服务?

postgresql - GoLang 服务无法使用 docker compose 访问 Postgres

installation - 在 ubuntu 14.04 中安装 asterisk 11

c - 关于填充同步结构

linux - 在aws中部署nodejs和mongoose应用程序