docker部署的坑--基于 alpine 制作docker镜像时

基于 alpine 制作docker镜像时

大家经常爱用alpine镜像 

FROM openjdk:8-jdk-alpine
但这个镜像是一个精简版,里面缺不少东西,常见的问题如下:

1、alpine操作系统下的软件库(国外)经常崩
# 国外的软件库崩掉时会出现“ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.16/main: temporary error (try again later)”

# 我们需要使用国内的软件库镜像
# https://mirrors.ustc.edu.cn/alpine/
# 帮助手册 https://mirrors.ustc.edu.cn/help/alpine.html

2、字体,字符集,时区的问题
alpine过于精简,会出现一下问题:
1 中文乱码
2 系统时间混乱
3 由于不支持字体,导出excel等功能,输出结果是空白

这需要我们自己下载字体包,设置时区,规定字符集编码
3、网络问题
执行构建命令:
docker build -t alpinelinuxjre .

即使用的是国内软件库也会出现“ERROR: http://mirrors.ustc.edu.cn/alpine/v3.16/: temporary error (try again later)”

这是因为docker的网络问题,构建时要使用本地网络。
4、不能愉快的装oracle的jdk
alpine底层的c函数库是基于musl libc的,不支持glibc(当然你可以自己下载)。
而oracle的jdk依赖的是glibc。所以alpine不能愉快的装oracle的jdk。
所以我下面就选择了装OpenJdk(够用即可)。


最终解决的Dockerfile文件内容如下:

FROM openjdk:8-jdk-alpine
WORKDIR /mydir_U01

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

RUN echo -e "https://mirrors.ustc.edu.cn/alpine/v3.16/main/" > /etc/apk/repositories \
&& apk update && apk upgrade && apk add ca-certificates && update-ca-certificates \
&& apk add --update tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*

ENV TZ=Asia/Shanghai
ENV LANG=C.UTF-8 \
LANG=zh_CN.UTF-8 \
LANGUAGE=zh_CN.UTF-8

ENV JRE_HOME /mydir_U01/jdk8u345-b01-jre #【你自己的路径】
ENV PATH ${PATH}:${JRE_HOME}/bin

同时:给docker配置DNS解析服务器

配置文件的路径: /etc/docker/daemon.json,没有此配置文件的话就新建一个

{
    "registry-mirrors": [
        "https://***.mirror.aliyuncs.com",
        "https://reg-mirror.qiniu.com",
        "https://docker.mirrors.ustc.edu.cn/"
    ],
    "dns": [
        "8.8.8.8",
        "114.114.114.114"
    ],
    "insecure-registries": []
}

 
posted @ 2024-02-04 17:27  酒哥-颢远  阅读(166)  评论(0编辑  收藏  举报