在 docker 容器中设置 ldconfig LD_LIBRARY_PATH

Der*_*rek 1 ld docker

我有一个 docker 容器,用于构建软件并在其中生成共享库。我想在另一个 docker 容器中使用这些库来实际运行应用程序。为此,我使用带有已安装卷的构建泊坞窗来将这些库放在主机上。

我的 RUNTIME 容器的 docker 文件如下所示:

FROM openjdk:8

RUN apt update
ENV LD_LIBRARY_PATH /build/dist/lib
RUN ldconfig
WORKDIR /build
Run Code Online (Sandbox Code Playgroud)

当我运行以下命令时:

docker run -u $(id -u ${USER}):$(id -g ${USER}) -it -v $(realpath .):/build runtime_docker bash
Run Code Online (Sandbox Code Playgroud)

我在 ldconfig -p 缓存中没有看到 /build/dist/lib 中的任何库。

我究竟做错了什么?

Dav*_*aze 5

您需要先将COPY库放入图像中RUN ldconfig;卷在这里对你没有帮助。

请记住,首先您运行docker build命令。这将运行 Dockerfile 中的所有命令,而不安装任何卷。docker run然后你可以从中获取该图像和一个容器。卷安装仅在docker run发生时发生,但RUN ldconfig已经发生了。

在您的 Dockerfile 中,您应该将COPY文件放入映像中。没有特别的理由不使用“正常”系统目录,因为映像具有独立的文件系统。

FROM openjdk:8

# Copy shared-library dependencies in
COPY dist/lib/libsomething.so.1 /usr/lib
RUN ldconfig

# Copy the actual binary to run in and set it as the default container command
COPY dist/bin/something /usr/bin
CMD ["something"]
Run Code Online (Sandbox Code Playgroud)