docker

fabric8/java-alpine-openjdk8-jdk镜像构建容器问题

此镜像构建的容器,里面跑登录微服务,验证码显示不出来
但是通过宿主机启动,可以正常启动
刚开始极度的蒙圈,因为其他微服务都可以正常运行,难道只能通过宿主机跑这个微服务了吗?

重启了好几遍,看着同样的报错,内心很平静(f**k)
Okay!问题我们还是要解决的,不然难道空有一张帅气的脸嘛???
容器内启动报错如下:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

具体思路

怀疑宿主机jdk环境和docker镜像jdk环境不一致;
https://github.com/docker-library/openjdk/issues/73
在上线网址观摩之后发现,相关的包可能会fontconfig在容器中调用。但是alpine镜像中的jdk环境好像没有这个fontconfig,因为JDK没有fontconfig不能加载出图片格式的文字。

解决方案

docker的alpine轻量级镜像包中没有fontconfig安装包,
只能在构建docker镜像的同时,将ttf-dejavu打包在镜像之中

在Dockerfile中添加以下内容
FROM fabric8/java-alpine-openjdk8-jdk

安装ttf-dejavu
RUN echo -e “https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main\n
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community” > /etc/apk/repositories

RUN apk --update add curl bash ttf-dejavu &&
rm -rf /var/cache/apk/*

构建新的镜像
在Dockerfile所在的目录输入命令:
docker build -t alpinejdk:3.2 .

再次启动

通过docker-compose编排工具启动
docker-compose.yaml
version: ‘3.1’
services:
mo-login:
image: alpinejdk:3.2
container_name: mo-login
privileged: true
restart: always
environment:
JAVA_OPTS: ‘-Xms256m -Xmx512m -Xss1024k’
network_mode: “host”
volumes:
- /opt/mo/mo-login/build/src:/opt/app
command: ["/bin/sh", “start.sh”]

启动并查看日志:docker-compose up -d ;docker-compose logs -f
服务启动正常,验证码可以正常出现
在这里插入图片描述

总结

docker技术虽然有很多优点:轻量级,秒级启动,应用资源隔离,移植性超强。
负面弊端:譬如本次的jdk镜像环境不完整。

不过docker的强大之处只有用了才能体会到方便之处。俺已经深刻体会到以前的虚拟机部署环境,环境数据迁移的麻烦。

解决问题的同时,尽量不要耽误工作的进展,这是我先通过宿主机跑起来,将流程跟开发人员交接清楚之后,再继续的二次研究。感谢屏幕前你的观看,希望可以帮助到你。
youngfit

发布了11 篇原创文章 · 获赞 6 · 访问量 8009
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览