我有一个树莓派2跑步拉斯皮安(Debian 9 伸展臂)。我想创建一个纯Debian Stretch的Chroot环境,并在那里安装Docker。我遵循这里的所有正确说明:https://docs.docker.com/install/linux/docker-ce/debian
到了安装的时候docker-ce,Aptitude 说我缺少一些库(例如 libc6),但我相信这些库在那里并且没有被识别。这似乎是一个非常简单的过程,但我遇到了一个巨大的障碍。
我录制了安装视频 https://youtu.be/wMmZGxZOBbs
以下是我执行的命令(全部以 root 身份运行):
mkdir d
debootstrap stretch d
mount -B /dev d/dev
mount -B /dev/pts d/dev/pts
mount -B /proc d/proc
mount -B /sys d/sys
chroot d /bin/bash
chroot 后
nano /etc/apt/sources.list # add contrib and non-free
apt-get update
apt-get install aptitude
apt-get install bash-completion
apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
add-apt-repository \
"deb [arch=armhf] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
apt-get update
apt-get install docker-ce # Fails, says package unavailable
aptitude # Try to install docker in aptitude shows missings libraries
更新:
运行便利脚本时,我收到以下输出:
root@pi2:/# curl -fsSL https://get.docker.com -o get-docker.sh
root@pi2:/# sh get-docker.sh
# Executing docker install script, commit: 4957679
+ sh -c apt-get update -qq >/dev/null
+ sh -c apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c curl -fsSL "https://download.docker.com/linux/debian/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
+ sh -c echo "deb [arch=armel] https://download.docker.com/linux/debian stretch edge" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get update -qq >/dev/null
+ sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
E: Unable to locate package docker-ce
运行apt-get update
显示存储库“不支持架构‘armel’”。
更新2
感谢AB的回答,它可能不能完全解决问题,但我肯定取得了很大的进步。
# ### Architecture Output from Debian Chroot
# dpkg --print-architecture
armel
和
# ### Architecture Output from Raspian
# dpkg --print-architecture
armhf
# lsb_release -cs # My system is up to date
stretch
# debootstrap --arch=armhf stetch d
E: No such script: /usr/share/debootstrap/scripts/stetch
更新3
我发现可以使用以下命令安装 Debian 架构 Armhf。
# debootstrap --foreign --arch=armhf stretch dir
更新4解决方案
我通过强制 Debian 安装为架构 armhf 成功安装了 docker。以下是我将 Debian 安装为架构 armhf 的步骤。
mkdir d
debootstrap --foreign --arch=armhf stretch d
cat /etc/resolv.conf > d/etc/resolv.conf
chroot d /bin/bash
./debootstrap/debootstrap --second-stage
apt-get clean
之后,我按照正常方式在 Debian 上安装 docker 的过程。
答案1
TL;DR:您无法在架构docker-ce
上安装 Docker 的软件包armel
,但您的系统(Rasberry Pi 2)无论如何都应该运行armhf
,因此您的设置有问题。
码头工人的Debian 的要求:
操作系统要求
要安装 Docker CE,您需要以下 Debian 或 Raspbian 版本之一的 64 位版本:
- 巴斯特10
- 拉伸 9(稳定)/Raspbian 拉伸
x86_64
Docker CE 在(或amd64
)armhf
、 和arm64
架构上受支持。在您的系统上该文本有点误导,因为armhf
受支持并且是 32 位。无论如何,由于您的系统正在使用armel
建筑而不是armhf
,docker.com 上没有可用的软件包。这就是为什么无论你尝试什么,你都无法遵循他们的指南并安装 Docker。
您可以先检查什么:
验证您的系统(在 chroot 之外)是否正在使用
armel
或.如果答案是,那么您的命令出错了,您应该使用该选项重试。armhf
dpkg --print-architecture
armhf
debootstrap
--arch=armhf
更新:这就是 OP 的内容,但似乎--foreign
也需要,所以这个命令做到了:debootstrap --foreign --arch=armhf stretch d
更新:验证核心也是一个
armhf
内核。它是否在某处armv7
(可能armv7l
)说了某事?或仅arm
或armv6
-某物?可能只有内核不正确。如果那不是armv7,你应该考虑改变它。否则,这是一个无法解释的错误debootstrap
,因为我无法在其他armhf
平台上重现它。
解决这个问题的历史想法如下:
- 检查您的硬件是否支持,然后使用而不是
armhf
重新安装。armhf
armel
维基百科告诉我们 Raspberry Pi 2 的 CPU 至少是 ARM Cortex-A7非常适合armhf
这样(过时)德班页面及其链接到 Debian 开发者的博客确认。这树莓派存储库提供仅有的armhf
不是armel
。所以根本没有理由armel
可以看出,这很令人费解。
还有什么可以也许,但无论如何都不容易,要做别的事:
- 另一种解决方案(如果它确实支持)则超出了此处的困难范围,
armhf
即完成安装 Docker 所需的缺少的多架构库。 - Debian 确实为目前尚未发布的未来 Debian 10 提供了同等版本
docker.io
包,可用于armel
(但它告诉:“目前不支持在非 amd64 主机上使用 docker.io”)。所以可以想象,当 Raspbian 推出时,这个包就可以使用了。无论如何,不要指望尖端版本。 - 可能可以从源代码中重建该
armel
架构的 Docker 包。无论如何,这需要您可能还不具备的知识。
即使您安装了它,也armel
请考虑您尝试从中提取的任何内容码头工人中心将会不兼容:如果 Docker 不提供,armel
那么armel
生态系统就根本不存在。