繁体   English   中英

无法在容器中安装 dotnet sdk 6.0 和 jdk 8

[英]cannot install in a container dotnet sdk 6.0 and jdk 8

我需要安装在同一个容器 dotnet sdk 6.0 和 jdk 8 中,我实现了以下 dockerfile 但创建了容器,并且在查看 java 时这似乎没有安装

##Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM ubuntu:20.04 AS build-jdk
RUN apt-get update && \
    apt-get install -y openjdk-8-jre && \
    apt-get install -y ant && \
    apt-get clean;

# Fix certificate issues
RUN apt-get update && \
    apt-get install ca-certificates-java && \
    apt-get clean && \
    update-ca-certificates -f;

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
COPY --from=build-jdk ./* ./
COPY . .
# Setup JAVA_HOME -- useful for docker commandline        
ENV JAVA_HOME /app/usr/lib/jvm/java-8-openjdk-amd64/
RUN export JAVA_HOME
WORKDIR /src
COPY ["DigitalSignature.csproj", "./"]
RUN dotnet restore "DigitalSignature.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "DigitalSignature.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "DigitalSignature.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DigitalSignature.dll"]

容器已创建,但在检查是否安装了 java 时,它没有出现

命令

java -version
Java -version 
printenv | env

检查java和环境变量

您在 Dockerfile ( FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build ) 的build阶段复制和配置 Java,但该阶段仅用于构建您的 .NET 项目。 该阶段未在文件映像中使用。 因此,任何未从该阶段明确复制到最终阶段的内容基本上都会被丢弃。

我建议将安装/配置 Java 的命令移至 Dockerfile 的初始阶段,即标记为base的那个。 final阶段基于base ,因此它们中包含的任何内容都将在您的图像中可用。

将它放在base阶段也将允许它在使用 Visual Studio 中的“快速调试”容器功能时可用。

我能够用下一个 Dockerfile 解决问题

FROM ubuntu:18.04 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
# Install "software-properties-common" (for the "add-apt-repository")
RUN apt-get update && apt-get install -y \
    software-properties-common

## Install Oracle's JDK
# add oracle jdk repository
RUN add-apt-repository ppa:ts.sch.gr/ppa && \
# accept oracle license
    echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set- 
selections && \
    echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set- 
selections && \
    apt-get update && \
# install oracle jdk 8 and make it default


apt-get -y install oracle-java8-installer && \
  apt-get -y install oracle-java8-set-default && \
# clean up
  apt-get clean all && \
  rm -rf /var/lib/apt/lists/*   

 Run wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb && \
     dpkg -i packages-microsoft-prod.deb && \
     rm packages-microsoft-prod.deb

 Run apt-get update; \
     apt-get install -y apt-transport-https && \
     apt-get update && \
     apt-get install -y dotnet-sdk-6.0

Run apt-get update; \
    apt-get install -y apt-transport-https && \
    apt-get update && \
    apt-get install -y aspnetcore-runtime-6.0


FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["DigitalSignature.csproj", "./"]
RUN dotnet restore "DigitalSignature.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "DigitalSignature.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "DigitalSignature.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENV ASPNETCORE_URLS=http://+:80
ENTRYPOINT ["dotnet", "DigitalSignature.dll"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM