如何使用多阶段docker映像将libnss3.so从一个映像复制到另一个映像



我需要使用"gcr.oi/distriles/java:8";图像以保持我的图像轻量级。但是,当我运行程序时,我得到错误:";由FileNotFoundException引起:/usr/lib/x86_64_linux_gnu/linbnss3.so"以及";不能初始化NSS";例外情况。因为,我必须使用这个图像,所以我想从另一个图像复制这个丢失的文件/依赖项";来自openjdk:8jre-stretch";。请建议如何复制此依赖项。

这个问题本身并不是很有描述性,因此我无法在这里给出具体的答案,也无法详细说明你在哪里犯了错误。但我可以根据Docker文档中介绍的示例给您举一个示例。

# syntax=docker/dockerfile:1
FROM gcr.oi/distroless/java:8
COPY --from=openjdk:8-jre-stretch /location/of/the/file/in/image /your/target/location
# After that, do your own stuff

COPY-from告诉Dockerfile从其他映像复制文件。如果镜像存在于DockerHub中,则会从那里提取镜像以启用复制。如果DockerHub中不存在映像,则必须在本地拥有它。

如果您在执行我在这里给出的示例时遇到任何问题,请告诉我。

如果在没有其他步骤的情况下文件不在映像中,则可以使用多阶段构建。例如

# syntax=docker/dockerfile:1
FROM openjdk:8-jre-stretch as builder
# execute some logic that you need to create the file
FROM gcr.oi/distroless/java:8
COPY --from=builder /location/of/the/file/in/image /your/target/location
# After that, do your own stuff

代码

来自openjdk:8jre-stretch作为生成器

开始构建一个中间映像,以后可以使用名称"builder"引用该映像。

相关内容

最新更新