До .NET 8 контейнеры по умолчанию работали как root, и начиная с .NET 8 все наши образы контейнеров Linux содержали пользователей, не связанных с root. Вы сможете размещать .NET-контейнеры с одной строкой кода как некорневый пользователь. Это изменение на уровне платформы сделает ваше приложение более безопасным и сделает .NET одной из самых безопасных экосистем разработчиков. Это небольшое изменение, но оно сильно влияет на глубину защиты.
Понимайте UID и GID в контейнерах Docker
По умолчанию процесс в контейнере работает с правами корня, и этот корневой пользователь — тот же пользователь, что и корень в машине-хосте. Разве это не страшно, ведь это значит, что как только процесс в контейнере получает нужный шанс, он может управлять всем на машине-носителе!
Ссылка:Вход по гиперссылке виден.
Образ Docker .NET 8
В образе .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-аккаунт для установки часового пояса, затем вернитесь к аккаунту приложения и измените его следующим образом:
(Конец)
|