Установка NET Core SDK 6.0 в Docker-контейнер: они что, издеваются?

я прошу прощения за несколько эпатирующий заголовок вопроса.

Вопрос вызван вот чем: я потратил уже довольно много времени, пытаясь установить dotnet sdk внутрь докеровских образов.

В принципе, весь процесс "закодирован" вот в таком Dockerfile:

    FROM ubuntu:latest
    RUN apt-get update
    RUN apt-get install -y wget
    RUN wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    RUN dpkg -i packages-microsoft-prod.deb
    RUN rm packages-microsoft-prod.deb
    RUN apt-get update
    RUN apt-get install -y apt-transport-https
    ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
    RUN apt-get install -y dotnet-sdk-6.0
    # dotnet sdk is installed!

    STOPSIGNAL SIGQUIT

Этот докерфайл я запускаю командами

    docker build -t make_synchro_bot-image -f Dockerfile .

    docker run -it --name make_synchro_bot-cont -d make_synchro_bot-image

Потом я коннекчусь внутрь контейнера,

    docker exec -it make_synchro_bot-cont /bin/bash

и у меня команда

dotnet --version говорит...

The command could not be loaded, possibly because:
  * You intended to execute a .NET application:
      The application '--version' does not exist.
  * You intended to execute a .NET SDK command:
      No .NET SDKs were found.

Download a .NET SDK:
https://aka.ms/dotnet-download

Learn about SDK resolution:
https://aka.ms/dotnet/sdk-not-found

При этом dotnet, dotnet --info - работают, а команда dotnet --list-sdks показывает пустой список установленных SDK

(см. приложенную картинку)

И вот у меня вопрос: что бы это, черт побери, значило?

я всё делаю по руководству

Причем, эта проблема проявляется на конкретном сервере, и, как назло, на продакшене.

Версию докера - обновил до последней, кеши, как мог, почистил, лишние имиджи удалил, docker images prune - сделал, пересобрал... результат - тот же самый!

В принципе, я готов бросить это джело и воспользоваться готовыми докер-образами. Просто я не особо понимаю пока, с какими трудностями я столкнусь. Мне нужно внутри контейнера выполнить команду

    dotnet publish

Если Вы дадите мне рекомендации, как делать "то же самое, но по-другому" - я буду благодарен

P.S. Последние вести с полей: наткнулся на такой вот репозиторий, сижу, изучаю... пытаюсь понять, где я не прав.

dotnet SDK не работает


Ответы (1 шт):

Автор решения: Pak Uula

Я знаю, как починить, но не могу объяснить, почему сработало.

Я собрал докер по вашей инструкции, зашел внутрь и посмотрел установленные пакеты:

root@d4b3cdbccc0c:/# apt list --installed | grep dotnet

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

dotnet-apphost-pack-6.0/jammy-updates,now 6.0.108-0ubuntu1~22.04.1 amd64 [installed,automatic]
dotnet-host/jammy-updates,now 6.0.108-0ubuntu1~22.04.1 amd64 [installed,automatic]
dotnet-hostfxr-6.0/jammy-updates,now 6.0.108-0ubuntu1~22.04.1 amd64 [installed,automatic]
dotnet-runtime-6.0/jammy-updates,now 6.0.108-0ubuntu1~22.04.1 amd64 [installed,automatic]
dotnet-sdk-6.0/jammy,now 6.0.400-1 amd64 [installed]
dotnet-targeting-pack-6.0/jammy-updates,now 6.0.108-0ubuntu1~22.04.1 amd64 [installed,automatic]

Меня смутил разнобой в версиях между dotnet-sdk-6.0 и остальными пакетами. SDK версии 6.0.400-1, а остальные пакеты 6.0.108-0ubuntu1~22.04.1

Я откатил SDK на ту же версию, что и остальные пакеты - и вдруг оно заработало:

oot@f80d2eecb57f:/# dotnet --version
6.0.108
root@f80d2eecb57f:/# dotnet --list-sdks
6.0.108 [/usr/lib/dotnet/dotnet6-6.0.108/sdk]

Укажите в Dockerfile конкретную версию SDK. Это выглядит уродски, но в данный текущий момент времени работает. Потом перестанет работать ))

RUN apt-get install -y dotnet-sdk-6.0=6.0.108-0ubuntu1~22.04.1
→ Ссылка