我有一个 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 中的任何库。
我究竟做错了什么?
您需要先将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)