До .NET 8 контейнери за замовчуванням працювали як root, і починаючи з .NET 8, усі наші образи контейнерів Linux містили не-кореневих користувачів. Ви зможете розміщувати .NET-контейнери з одним рядком коду як неroot-користувач. Ця зміна на рівні платформи зробить ваш додаток більш захищеним і зробить .NET однією з найзахищеніших екосистем розробників. Це невелика зміна, але вона має великий вплив на глибину захисту.
Розумійте UID та GID у контейнерах Docker
За замовчуванням процес у контейнері виконується з правами кореневого користувача, і цей кореневий користувач є тим самим користувачем, що й корінь у хост-машині. Хіба це не страшно, бо це означає, що коли процес у контейнері має належний шанс, він може контролювати все на хост-машині!
Посилання:Вхід за гіперпосиланням видно.
Образ .NET 8 Docker
Існує дві основні зміни у образі .NET 8 Docker, а саме:
- Image створює новий акаунт додатку та групу, і за замовчуванням запускає додаток із цим акаунтом
- Переключившись на порт 8080, виявилося, що це порт 80, оскільки порт 80 є привілейованим, root rights потрібні (принаймні в деяких місцях).
Адреса вихідного коду зображення .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 : error 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-акаунт, щоб встановити часовий пояс, потім поверніться до акаунта додатку і змініть його наступним чином:
(Кінець)
|