如何在Debian Chroot中安装Docker?

塞珀罗

我有一个运行Raspian(Debian 9 Stretch Arm)Raspberry Pi 2我想创建一个纯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'd

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 architechture Armhf。

# debootstrap --foreign --arch=armhf stretch dir

UPDATE4解决方案

我通过强制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的过程。

AB

TL; DR:您无法docker-cearmel体系结构安装Docker的软件包,但是您的系统(作为Rasberry Pi 2)应该始终在运行armhf,因此您的设置有问题。

Docker对Debian要求

操作系统要求

要安装Docker CE,您需要以下Debian或Raspbian版本之一的64位版本:

  • 克星10
  • 弹力9(稳定)/覆盆子弹力

Docker CE在x86_64(或amd64armhf,和arm64体系结构上受支持在您的系统上该文本有点误导性,因为该文本armhf受支持且为32位。无论如何,由于您的系统使用的是armel体系结构而不是armhf,因此docker.com没有可用的软件包。这就是为什么无论您尝试什么,都将无法遵循他们的指南并安装Docker的原因。

您可以先检查什么:

  • 验证您的系统(chroot环境之外)使用armelarmhfdpkg --print-architecture如果答案是肯定的,armhf则您的debootstrap命令出错了,您应该使用该--arch=armhf选项再试一次UPDATE:这是用于OP的,但似乎--foreign也需要它,因此此命令可以实现:

    debootstrap --foreign --arch=armhf stretch d
    
  • 更新:验证内核也是armhf内核。它是否在某处说-armv7某物armv7l或仅此armarmv6某物?可能只有内核不是正确的内核。如果不是armv7,则应考虑对其进行更改。否则,这是一个无法解释的错误debootstrap,因为我无法在其他armhf平台上重现该错误


解决此问题的历史思路如下:

还有其他可能但不容易做到的事情:

  • 如果它确实支持armhf,那么另一个解决方案超出了它的困难范围,那就是完成安装Docker所需的缺少的多体系结构库。
  • Debian确实会为尚未发行的将来的Debian 10发行同等docker.io可用的软件包armel(但它告诉您:“目前不支持在非amd64主机上使用docker.io”)。因此,可以想象当Raspbian出现时,此软件包可以使用。无论如何不要指望前沿版本。
  • 可能有可能从源代码中为该armel架构重建那些Docker软件包无论如何,这都需要您可能还没有的知识。

即使安装了它,也armel请考虑您尝试从Docker Hub提取的任何东西都是不兼容的:如果Docker不提供armel机会,那么根本就不会有armel生态系统。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章