ARM版Docker安装实战
tags: 网站
1 环境参考
硬件平台:Sail - i.max6Q 工业级开发板。(感谢电鱼公司无偿赞助开发板。公司主页:www.dianyu.net。)
操作系统: ubuntu 14.04(armhf)
2 安装基本软件
apt-get install curl wget apt-transport-https ca-certificates3 更换系统软件源
备份原sources.list文件
# 备份原文件
cp /etc/apt/sources.list /etc/apt/sources.list.bak新建sources.list
# 新建文件
vi /etc/apt/sources.list粘贴中科大Ubuntu armhf 源内容(Ubuntu 14.04 trusty)
中科大Ubuntu 14.04 trusty armhf 软件源(推荐https)
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ trusty main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ trusty main main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-proposed main restricted universe multiverse
中科大Ubuntu 14.04 trusty armhf 软件源(http备选方案)
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-updates main multiverse restricted universe
4 更新系统CA证书
# 下载证书  cacert.pem
# 网址: https://curl.haxx.se/docs/caextract.html
wget https://curl.haxx.se/ca/cacert.pem --no-check-certificate
# 导入证书
# 转换为crt格式
openssl x509 -outform der -in cacert.pem -out cacert.crt
# 复制到证书目录
sudo cp cacert.crt /usr/local/share/ca-certificates/cacert.crt
# 添加证书到系统
sudo update-ca-certificates
# 重启系统或重启特定服务使新证书生效
reboot重启后 验证证书是否生效
# 访问https网站查看是否报证书错误
curl https://wanghualong.cn
curl https://www.docker.com/5 安装docker
按照docker官方文档(armhf)步骤安装docker-ce
# 1 更新源
sudo apt-get update
# 2 添加系统https支持
sudo apt-get install \\
    apt-transport-https \\
    ca-certificates \\
    curl \\
    software-properties-common
    
# 3 添加Docker官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 4 查看指纹与官方文档进行对比
apt-key fingerprint 0EBFCD88
# 5 添加Docker官方仓库(armhf)
## 实战中,按照官方文档命令添加源会将 sources.list 原有内容覆盖,建议手动添加防止出错。
## vi /etc/apt/sources.list
## 末尾添加以下源
deb [arch=armhf] https://download.docker.com/linux/ubuntu trusty stable
# 6 更新index文件
apt-get update
# 7 安装Docker
sudo apt-get install docker-ce
实战错误排除记录
安装完成后查看版本
docker versionroot@localhost:/etc/apt# docker version
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:31:28 2018
 OS/Arch:           linux/arm
 Experimental:      false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
root@localhost:/etc/apt# 提示docker daemon 未运行,尝试重启docker daemon
# 重启docker服务
service docker restartroot@localhost:/etc/apt# service docker restart
stop: Unknown instance: 
docker start/running, process 18039
root@localhost:/etc/apt# 重启未报错,但仍然提示docker daemon 未运行。
手动启动 dockerd 查看错误信息提示。
# 停止docker服务
service docker stop
# 手动启动dockerd
sudo dockerd发现以下报错信息

末尾提示 cgroup错误,往上还有auf overlay等文件系统错误,查看linux内核发现版本为4.1.15属于较新版本内核,理应支持这些功能。
与硬件供应商沟通后,了解到此开发板的Ubuntu内核为自行编译版本,编译前会精简掉不需要的额外功能以降低系统资源消耗,可在编译之前打开相关选项。
按此推理,Ubuntu官方发行版本内核应该不会出现此错误(待实验考证)
联系硬件工程师打开cgroup overlay选项重新编译内核。
重新运行测试

末尾报iptables错误,经测试iptables已安装最新版本,初步排查为内核缺少ip_tables模块。
联系硬件工程师重新编译内核,更新相关网络模块后,docker daemon成功运行.
root@localhost:~# docker version
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:31:28 2018
 OS/Arch:           linux/arm
 Experimental:      false
Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:27:15 2018
  OS/Arch:          linux/arm
  Experimental:     false
root@localhost:~# 尝试pull一个centos镜像
docker pull centos
root@localhost:~# docker pull centos
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid提示证书过期,之前已经更新过CA证书,怀疑是系统时间问题
# 查看系统时间
date果然,更新内核后,系统时间变为了1970年
root@localhost:~# date
Thu Jan  1 00:01:19 UTC 1970更改为当前日期后,恢复正常。
root@localhost:~# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
f98cb03e8d55: Pull complete 
Digest: sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf
Status: Downloaded newer image for centos:latest
root@localhost:~# 
更新中。。。
2018年8月23日
你好,最近工作需要要在arm上安装docker,芯片是AM3352;网上看到大多数都是将ubuntu(armhf)安装到开发板后然后在在ubuntu系统中安装docker;我想问,是否可以在一般arm中移植的linux系统中直接安装docker,或者将docker集成到linux内核中呢?另外,还想问一个问题,如果安装ubuntu(armhf)系统,底层硬件驱动后期如何调用,是否知道调用驱动的API?
最近我也在arm上,安装docker,芯片是RK3399的。貌似碰到了和你一样的问题。\nCannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?\n但是我貌似看不到日志,请教如何看日志。\n/var/log下面貌似没有对应的日志\n\n\n多谢