架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 513|回复: 1

[资料] .NET 8 之 Docker 基础镜像变化

[复制链接]
发表于 2023-12-23 17:30:10 | 显示全部楼层 |阅读模式
在 .NET 8 之前的容器,默认都是以 root 身份运行程序,从.NET 8开始,我们所有的 Linux 容器映像都将包含非 root 用户。您将能够以非 root 用户身份使用一行代码托管 .NET 容器。这一平台级别的更改将使您的应用程序更加安全,并使 .NET 成为最安全的开发人员生态系统之一。这是一个小变化,但对纵深防御影响很大。

理解 docker 容器中的 uid 和 gid

默认情况下,容器中的进程以 root 用户权限运行,并且这个 root 用户和宿主机中的 root 是同一个用户。听起来是不是很可怕,因为这就意味着一旦容器中的进程有了适当的机会,它就可以控制宿主机上的一切!

参考:https://www.cnblogs.com/sparkdev/p/9614164.html

.NET 8 Docker 镜像

.NET 8 Docker 镜像主要有两点变化,如下:

  • 镜像新建了 app 账号和组,默认以 app 账户运行应用
  • 切换到端口8080,原来是80端口,由于80端口是一个特权端口,需要root权限(至少在某些地方)


.NET Docker 镜像源码地址:https://github.com/dotnet/dotnet-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 如下:

如下图:

QQ截图20231223171137.jpg

使用 app 账户进入到基础镜像,命令如下:

输出当前用户和环境变量,如下图:

QQ截图20231223172912.jpg

参考:https://devblogs.microsoft.com/dotnet/securing-containers-with-rootless/

Dockerfile 文件

如果需要将项目打包成 Docker 镜像,需要新建 .NET 8 Docker 容器支持,默认 Linux 环境 Dockerfile 文件配置如下:

如果在 Dockerfile 设置系统时区,如下代码:

可能会出现无权访问的错误(Permission denied),报错如下:

4>F:\itsvse\Dockerfile : error CTC1014: #21 [final 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone
4>F:\itsvse\Dockerfile : error CTC1014: #21 0.314 ln: failed to create symbolic link '/etc/localtime': Permission denied
4>F:\itsvse\Dockerfile : error CTC1014: #21 ERROR: process "/bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone" did not complete successfully: exit code: 1
4>F:\itsvse\Dockerfile : error CTC1014: ------
4>F:\itsvse\Dockerfile : error CTC1014:  > [final 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone:
4>F:\itsvse\Dockerfile : error CTC1014: #21 0.314 ln: failed to create symbolic link '/etc/localtime': Permission denied
先使用 root 账户设置完时区,再切回 app 账户,修改如下:

(完)





上一篇:.NET/C# 中集合 ToLookup 方法
下一篇:PHP 获取所有请求头信息
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-12-23 17:31:55 | 显示全部楼层
推荐两款分析 Docker 镜像层的工具
https://www.itsvse.com/thread-10063-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-27 20:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表