数码资讯
树莓派上安装docker并运行jar
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
系统信息
Distributor ID: Raspbian Description: Raspbian GNU/Linux 8.0 (jessie) Release: 8.0 Codename: jessie
安装步骤
1、配置源地址
vi /etc/apt/sources.list 我配置的源地址如下:
deb http://mirrors.zju.edu.cn/raspbian/raspbian/ jessie main contrib non-free rpi deb-src http://mirrors.zju.edu.cn/raspbian/raspbian/ jessie main contrib non-free rpi
2、更新
sudo apt-get update
3、安装一些工具包
sudo apt-get install
apt-transport-https
ca-certificates
curl
software-properties-common
4、安装docker
apt安装各种失败,直接下载package安装了。
wget https://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_17.03.0~ce-0~raspbian-jessie_armhf.deb sudo dpkg -i docker-engine_17.03.0~ce-0~raspbian-jessie_armhf.deb
5、安装完成
root@raspberrypi:/u02/docker# docker version Client: Version: 17.03.0-ce API version: 1.26 Go version: go1.7.5 Git commit: 60ccb22 Built: Thu Feb 23 11:32:23 2017 OS/Arch: linux/arm Server: Version: 17.03.0-ce API version: 1.26 (minimum version 1.12) Go version: go1.7.5 Git commit: 60ccb22 Built: Thu Feb 23 11:32:23 2017 OS/Arch: linux/arm Experimental: false
使用过程中遇到的问题
###1、运行sudo docker run hello-world
报错:docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. See 'docker run --help'.
解决办法:检查docker有没有启动
service docker start 发现报错:Job for docker.socket failed. See 'systemctl status docker.socket' and 'journalctl -xn' for details. A dependency job for docker.service failed. See 'journalctl -xn' for details. root@raspberrypi: journalctl -xn Mar 18 23:43:10 raspberrypi systemd[1]: Unit docker.socket entered failed state. Mar 18 23:43:10 raspberrypi sudo[28389]: pam_unix(sudo:session): session closed for user root Mar 18 23:43:23 raspberrypi oray_serve[689]: 2017-03-18 23:43:23 0x00000001 [ddns] OnStatusChanged -> okKeepAliveRecved Mar 18 23:43:23 raspberrypi oray_serve[689]: status:4 根据文档提示:https://docs.docker.com/engine/installation/linux/linux-postinstall/ 创建docker用户组, sudo groupadd docker sudo usermod -aG docker $USER
2、继续启动,发现还是报错
Mar 18 23:47:49 raspberrypi dockerd[28527]: /usr/bin/dockerd: error while loading shared libraries: libapparmor.so.1: cannot open shared object file: No such file or d
解决办法:缺少依赖包,继续安装
apt-get install libapparmor1
###3、docker run hello-world发现timeout
Unable to find image 'hello-world:latest' locally docker: Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io: net/http: TLS handshake timeout.
解决办法:改用国内镜像
vi /etc/docker/daemon.json
# 内容如下,新版使用这种方式配置,和之前的有区别,参考这个https://docs.docker.com/engine/reference/commandline/dockerd/#/daemon-configuration-file
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
sudo service docker restart
4、docker run hello-world 此处报错
standard_init_linux.go:178: exec user process caused "exec format error"
解决方案:原因是镜像版本不对,树莓派需要使用docker run armhf/hello-world
###5、运行简单的jar java源码
public class DockerTest{
public static void main(String[] args) throws Exception{
System.out.println("hello world");
}
}
经过编译,打包为dockerjava.jar dockerfile文件内容:
# java版本必须是armhf,否则会提示异常standard_init_linux.go:178: exec user process caused "exec format error" FROM armhfbuild/java VOLUME /tmp ADD dockerjava.jar /app.jar CMD java -jar /app.jar
大功告成
root@raspberrypi:/u02/docker# docker build -t hello-java . Sending build context to Docker daemon 9.216 kB Step 1/4 : FROM armhfbuild/java latest: Pulling from armhfbuild/java a3ed95caeb02: Pull complete cc755030d803: Pull complete 45cef0a2caa7: Pull complete e9fb2d3feaa1: Pull complete 01896f522502: Pull complete b79812d20a3d: Pull complete f4de4a92a47d: Pull complete 69a8f602f62d: Pull complete Digest: sha256:e32fd699d42d09e049ded4624f0a9c50b1237853859b3e658dc9f5c5b544ab4b Status: Downloaded newer image for armhfbuild/java:latest ---> 2c4f3e2b6be5 Step 2/4 : VOLUME /tmp ---> Running in 1937881bc764 ---> bcebdbde871e Removing intermediate container 1937881bc764 Step 3/4 : ADD dockerjava.jar /app.jar ---> a63205b5b6cb Removing intermediate container f4c3c891e76c Step 4/4 : CMD java -jar /app.jar ---> Running in 2a2540964e7f ---> b6bec8602898 Removing intermediate container 2a2540964e7f Successfully built b6bec8602898 root@raspberrypi:/u02/docker# docker run hello-java hello world
总结
树莓派是arm处理器,所以在下载镜像的时候一定要注意。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。