Преди .NET 8, контейнерите по подразбиране работеха като root, а от .NET 8 всички наши Linux образи на контейнери ще съдържат потребители, които не са root файлове. Ще можете да хоствате .NET контейнери с един ред код като потребител без root. Тази промяна на ниво платформа ще направи вашето приложение по-сигурно и ще направи .NET една от най-сигурните екосистеми за разработчици. Това е малка промяна, но има голямо влияние върху защитата в дълбочина.
Разберете UID и GID в Docker контейнерите
По подразбиране процесът в контейнера се изпълнява с root потребителски права, като този root потребител е същият потребител като root в хост машината. Не звучи ли това страшно, защото означава, че след като процесът в контейнера получи правилния шанс, може да контролира всичко на хост машината!
Препратка:Входът към хиперлинк е видим.
.NET 8 Docker изображение
Има две основни промени в образа на .NET 8 Docker, както следва:
- Image създава нов акаунт и група в приложението, и по подразбиране стартира приложението с акаунта
- Превключих на порт 8080 и се оказа, че е порт 80, тъй като порт 80 е привилегирован порт, коренните права са необходими (поне на някои места).
.NET адрес на изходния код на изображението на Docker:Входът към хиперлинк е видим.
Зависимостите са следните:
aspnet:8.0-bookworm-slim -> dotnet/runtime-8.0.0-bookworm-slim-amd64 -> dotnet/runtime-deps-8.0.0-bookworm-slim-amd64 -> amd64/debian:bookworm-slim
dotnet/runtime-deps-8.0.0-bookworm-slim-amd64 изглежда така:
Както е показано по-долу:
Използвайте акаунта в приложението, за да въведете основното изображение, и командата е следната:
Изведете текущите потребителски и средни променливи, както е показано на следващата фигура:
Препратка:Входът към хиперлинк е видим.
Dockerfile файл
Ако трябва да пакетирате проекта си в Docker образ, трябва да създадете нова поддръжка за .NET 8 Docker контейнер, а стандартната конфигурация на файловете Dockerfile в Linux средата е следната:
Ако зададете системната часова зона в Dockerfile, следният код:
Грешката при отказано разрешение може да възникне по следния начин:
4>F:\itsvse\Dockerfile : грешка CTC1014: #21 [финална 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone 4>F:\itsvse\Dockerfile : грешка CTC1014: #21 0.314 ln: не успя да създаде символна връзка '/etc/localtime': Разрешението отказано 4>F:\itsvse\Dockerfile : грешка CTC1014: #21 ГРЕШКА: процесът "/bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone" не завърши успешно: код за изход: 1 4>F:\itsvse\Dockerfile : грешка CTC1014: ------ 4>F:\itsvse\Dockerfile : грешка CTC1014: > [финални 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone: 4>F:\itsvse\Dockerfile : грешка CTC1014: #21 0.314 ln: не успя да създаде символна връзка '/etc/localtime': Разрешението отказано Използвайте root акаунта, за да зададете часовата зона, след това се върнете към акаунта в приложението и го променете по следния начин:
(Край)
|