簡體   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