Установка 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. Последние вести с полей: наткнулся на такой вот репозиторий, сижу, изучаю... пытаюсь понять, где я не прав.
Ответы (1 шт):
Я знаю, как починить, но не могу объяснить, почему сработало.
Я собрал докер по вашей инструкции, зашел внутрь и посмотрел установленные пакеты:
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
