我必须为两个独立程序构建单个 docker 映像,一个是 java 程序,一个是 c++ 程序。现在,我已经在 dockerfile 中为 c++ 程序编写了依赖项,并且它运行良好,但是当我检查 java 时,在所有示例中都说使用 java 的基本映像(FROM openjdk:8-jre-alpine),但我的问题是我必须仅从某个自定义映像构建映像。我正在使用 ubuntu,并且我已经通过安装 openjdk 运行了我的简单 java 程序,但我不知道如何正确添加 java 依赖项并将其与 c++ 一起在 docker 容器中运行。
我尝试添加运行 apt-get install -y default-jdk但它返回非零代码。我也试过运行 apt-get 安装 oracle-java8-installer但它也没有起作用。以下是我的 Dockerfile。
来自 csimage/abcserver
RUN apt-get update -y
RUN apt-get install -y g++
RUN apt-get install -y make
RUN apt-get install -y build-essential
RUN apt-get install -y default-jdk
#C++ program
ADD ./cppProgram /cppProgram
#java program
ADD ./javaProgram /javaProgram
WORKDIR /cppProgram
WORKDIR /javaProgram
COPY abcserver.json /etc/
RUN make
答案1
您可以查看错误日志:
docker history image_name
docker logs container_id
您将发现容器无法启动的原因。如果没有容器日志中的数据,很难给您其他建议。也许这些包在存储库中找不到。
一些技巧:
如果您有 2 个独立的应用程序,则每个应用程序都需要一个单独的容器。这当然不是必需的,但从工程角度来看是正确的。不建议使用 Unite(当然,在您的情况下可能不适用。)
每次 RUN 都会添加一个新的“层”,因此我建议您使用“\”:
RUN apt-get update -y && \
apt-get install -y g++ && \
apt-get install -y make && \
apt-get install -y build-essential && \
apt-get install -y default-jdk