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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值