基于Alpine构建的java8 docker镜像运行后验证码不显示,并出现如下错误:
Error loading shared library libgcc_s.so.1: No such file or directory
是因为Alpine比较精简,默认没有 libgcc。安装上即可
apk add libgcc
完整的Dockerfile如下:
FROM alpine:3.21
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH=$JAVA_HOME/bin:$PATH
# 默认utf-8编码及中国时区
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8' TZ='Asia/Shanghai'
RUN set -eux; \
ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && \
echo ${TZ} > /etc/timezone && \
echo https://mirrors.ustc.edu.cn/alpine/v3.21/main > /etc/apk/repositories && \
echo https://mirrors.ustc.edu.cn/alpine/v3.21/community >> /etc/apk/repositories && \
apk update && apk upgrade && \
apk add --no-cache \
# 解决验证码不显示问题
fontconfig ttf-dejavu libgcc \
# gnupg required to verify the signature
gnupg \
# utilities for keeping Alpine and OpenJDK CA certificates in sync
# https://github.com/adoptium/containers/issues/293
ca-certificates p11-kit-trust \
# locales ensures proper character encoding and locale-specific behaviors using en_US.UTF-8
musl-locales musl-locales-lang \
tzdata \
# Contains `csplit` used for splitting multiple certificates in one file to multiple files, since keytool can
# only import one at a time.
coreutils \
# Needed to extract CN and generate aliases for certificates
openssl \
; \
rm -rf /var/cache/apk/*
ENV JAVA_VERSION=jdk8u442-b06
RUN set -eux; \
ARCH="$(apk --print-arch)"; \
case "${ARCH}" in \
x86_64) \
ESUM='4fb0636534b0cd4534a3cdcbbe7cf2e937523d6376d9cef00cc6cfd5d19537e8'; \
BINARY_URL='https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u442-b06/OpenJDK8U-jre_x64_alpine-linux_hotspot_8u442b06.tar.gz'; \
;; \
*) \
echo "Unsupported arch: ${ARCH}"; \
exit 1; \
;; \
esac; \
#用wget下载而不是自己先下载到本地然后用COPY ADD命令的原因是:COPY ADD会增加镜像大小,wget不会增加镜像大小
wget -O /tmp/openjdk.tar.gz ${BINARY_URL}; \
wget -O /tmp/openjdk.tar.gz.sig ${BINARY_URL}.sig; \
export GNUPGHOME="$(mktemp -d)"; \
# gpg: key 843C48A565F8F04B: "Adoptium GPG Key (DEB/RPM Signing Key) <temurin-dev@eclipse.org>" imported
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 3B04D753C9050D9A5D343F39843C48A565F8F04B; \
gpg --batch --verify /tmp/openjdk.tar.gz.sig /tmp/openjdk.tar.gz; \
rm -rf "${GNUPGHOME}" /tmp/openjdk.tar.gz.sig; \
echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
mkdir -p "$JAVA_HOME"; \
tar --extract \
--file /tmp/openjdk.tar.gz \
--directory "$JAVA_HOME" \
--strip-components 1 \
--no-same-owner \
; \
rm -f /tmp/openjdk.tar.gz;
RUN set -eux; \
echo "Verifying install ..."; \
echo "java -version"; java -version; \
echo "Complete."
COPY --chmod=755 entrypoint.sh /__cacert_entrypoint.sh
ENTRYPOINT ["/__cacert_entrypoint.sh"]
构建好的镜像地址:
- docker
docker pull quay.io/rzorzo/java8
- podman
podman pull quay.io/rzorzo/java8
7943

被折叠的 条评论
为什么被折叠?



