当前位置: 首页 > article >正文

Dockerfile系列(四) 安全与最佳实践-生产环境不是游乐场

安全与最佳实践生产环境不是游乐场本文基于 Docker 24.x聚焦生产环境 Dockerfile 的安全红线与最佳实践。场景引入线上容器被入侵了去年组里出过一次安全事故测试环境的容器被人挖矿了CPU 飙到 100%。排查发现攻击者通过某个漏洞拿到了容器的 shell然后下载挖矿程序…为什么能拿到 shell因为容器跑的是root 用户而且镜像里自带了curl、wget攻击者想下载啥就下载啥。生产环境的 Dockerfile不是能跑就行得按安全标准来写。今天咱们把红线划清楚。安全实践 1绝不用 root 跑容器默认有多危险大部分基础镜像默认用 rootUID 0。如果容器被攻破攻击者在容器里是 root → 如果挂载了主机目录能读写主机文件Docker 漏洞逃逸时root 容器更容易拿到主机 root 权限正确姿势创建非 root 用户FROM node:18-alpine # 创建用户组和用户Alpine 用 addgroup/adduser RUN addgroup -g 1001 -S nodejs \ adduser -S nextjs -u 1001 WORKDIR /app COPY package*.json ./ RUN npm ci --onlyproduction COPY . . # 改文件所有者 RUN chown -R nextjs:nodejs /app # 切换到非 root 用户 USER nextjs EXPOSE 3000 CMD [npm, start]验证一下$dockerrun--rmmy-appiduid1001(nextjs)gid1001(nodejs)groups1001(nodejs)注意USER之后的所有指令都以该用户身份运行如果前面需要 root 权限如装系统包在USER之前做Kubernetes 里还可以加securityContext.runAsNonRoot: true双重保险安全实践 2选精简基础镜像镜像越小攻击面越小镜像类型大小适用场景风险ubuntu:latest~80MB通用工具多攻击面大node:18~180MB开发/构建包含编译工具node:18-alpine~50MB生产推荐精简工具少node:18-slim~70MB平衡选择比 alpine 兼容性好distroless~20MB极致安全无 shell难调试生产环境推荐# ✅ 推荐Alpine 或 Slim FROM node:18-alpine # 或者更安全的 Distroless需要多阶段构建 FROM gcr.io/distroless/nodejs18-debian12Alpine 的坑基于 musl libc某些原生模块可能不兼容。遇到诡异崩溃时换slim试试。安全实践 3敏感信息绝不硬编码错误示范千万别学# ❌ 错误密钥写死在 Dockerfile 里 ENV DATABASE_PASSWORDSuperSecret123! ENV API_KEYsk-live-abcdef123456 RUN curl -H Authorization: $API_KEY https://api.example.com/data问题密码永久留在镜像层里即使后面删掉也能通过docker history看到镜像推送到仓库密码跟着走任何人docker inspect都能看到环境变量正确做法构建时参数不敏感或临时ARG BUILD_VERSIONlatest LABEL version${BUILD_VERSION}运行时注入敏感信息# 启动时传入dockerrun-eDATABASE_PASSWORDsecretmy-app# 或用 Docker SecretSwarm/Kubernetes 更好dockerrun--secretdb_password my-app代码里读取// Node.jsconstdbPassprocess.env.DATABASE_PASSWORD;if(!dbPass){thrownewError(DATABASE_PASSWORD is required);}安全实践 4.dockerignore 是你的守门员不设置.dockerignoreCOPY . .会把啥都塞进去.git/ # 整个 git 历史 node_modules/ # 本地依赖可能含平台相关二进制 .env # 本地环境变量 *.pem # 证书密钥 Dockerfile # 自己 .dockerignore # 自己 dist/ # 构建产物如果多阶段不需要标准 .dockerignore 模板# 依赖镜像里会重新装 node_modules/ vendor/ # 构建产物 dist/ build/ target/ *.exe *.dll # 环境文件含敏感信息 .env .env.local .env.*.local # 版本控制 .git/ .gitignore .gitattributes # 编辑器 .idea/ .vscode/ *.swp *.swo # 测试 coverage/ *.test.js __tests__/ # 文档和配置不需要进镜像 README.md CHANGELOG.md Dockerfile* docker-compose*.yml .dockerignore # 日志 *.log logs/ # 证书密钥 *.pem *.key *.crt安全实践 5健康检查与资源限制HEALTHCHECK让 Docker 知道你的服务还活着FROM node:18-alpine # ... 其他指令 ... # 每 30 秒检查一次超时 3 秒失败 3 次认为不健康 HEALTHCHECK --interval30s --timeout3s --start-period5s --retries3 \ CMD node healthcheck.js || exit 1 CMD [npm, start]// healthcheck.jsconsthttprequire(http);constoptions{hostname:localhost,port:3000,path:/health,method:GET,timeout:2000};constreqhttp.request(options,(res){process.exit(res.statusCode200?0:1);});req.on(error,()process.exit(1));req.end();运行时资源限制docker run# 限制 CPU 和内存dockerrun\--memory512m\--memory-swap512m\--cpus1.0\--pids-limit1000\--read-only\--security-optno-new-privileges:true\my-app参数作用--read-only根文件系统只读--no-new-privileges禁止提升权限--pids-limit限制进程数防 fork 炸弹安全实践 6镜像扫描构建完扫一遍看看有没有已知漏洞# Docker 内置扫描需要登录 Docker Hubdockerscan my-app# 更推荐 Trivy开源速度快trivy image my-app# 或 Snyksnyk containertestmy-app扫描报告会列出 CVE 漏洞按严重度分级。生产镜像应该零高危漏洞。一句话总结生产级 Dockerfile 的安全三板斧非 root 用户、精简镜像、敏感信息外置——再配合.dockerignore守门和镜像扫描兜底才能把攻击面压到最小。

相关文章:

Dockerfile系列(四) 安全与最佳实践-生产环境不是游乐场

安全与最佳实践:生产环境不是游乐场本文基于 Docker 24.x,聚焦生产环境 Dockerfile 的安全红线与最佳实践。场景引入:线上容器被入侵了 去年组里出过一次安全事故:测试环境的容器被人挖矿了,CPU 飙到 100%。排查发现&a…...

WindowResizer:彻底解放你的Windows窗口管理自由

WindowResizer:彻底解放你的Windows窗口管理自由 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些顽固的、无法调整大小的应用程序窗口而烦恼吗?W…...

七段数码管显示数字0-9:从硬件原理到Verilog代码的保姆级解析

七段数码管显示数字0-9:从硬件原理到Verilog代码的保姆级解析 第一次接触七段数码管时,很多人会被它简单外表下的复杂逻辑所迷惑——为什么七个LED排列组合就能显示所有数字?共阴和共阳到底有什么区别?Verilog代码里那些神秘的二进…...

别再傻傻分不清了!一文搞懂DEM、DSM、DTM的区别与应用场景

数字高程模型的三维密码:DEM、DSM与DTM的深度解析与实战指南 当你在规划一座新城时,是选择包含建筑物的地表模型,还是需要"剥去"所有植被和建筑的裸地数据?洪水模拟应该用哪种高程数据才能准确预测淹没范围?…...

抖音视频下载完整教程:无水印快速批量下载实战指南

抖音视频下载完整教程:无水印快速批量下载实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support.…...

CoPaw创意写作效果集锦:广告文案、诗歌与短篇故事生成

CoPaw创意写作效果集锦:广告文案、诗歌与短篇故事生成 1. 创意写作新纪元 当AI开始写诗,当机器能构思故事,创意写作的边界正在被重新定义。CoPaw作为新一代创意写作助手,已经展现出令人惊艳的文本生成能力。不同于简单的文字拼接…...

5分钟掌握YetAnotherKeyDisplayer:专业按键显示工具终极指南

5分钟掌握YetAnotherKeyDisplayer:专业按键显示工具终极指南 【免费下载链接】YetAnotherKeyDisplayer App for displaying pressed keys of the keyboard 项目地址: https://gitcode.com/gh_mirrors/ye/YetAnotherKeyDisplayer 你是否在直播、教学或演示时&…...

DS4Windows终极指南:3步让PS手柄在Windows上完美运行游戏

DS4Windows终极指南:3步让PS手柄在Windows上完美运行游戏 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 还在为PC游戏无法识别你的PlayStation手柄而烦恼吗?每次连…...

围棋AI分析工具LizzieYzy:从入门到精通的智能复盘神器

围棋AI分析工具LizzieYzy:从入门到精通的智能复盘神器 【免费下载链接】lizzieyzy LizzieYzy - GUI for Game of Go 项目地址: https://gitcode.com/gh_mirrors/li/lizzieyzy 还在为围棋复盘找不到问题所在而烦恼吗?LizzieYzy可能是你正在寻找的终…...

三月七小助手:崩坏星穹铁道全自动任务管理终极指南

三月七小助手:崩坏星穹铁道全自动任务管理终极指南 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 你是否厌倦了每天在《崩坏:星穹铁道》中重…...

EldenRingSaveCopier终极指南:如何轻松安全地迁移你的艾尔登法环存档

EldenRingSaveCopier终极指南:如何轻松安全地迁移你的艾尔登法环存档 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 你是否曾因电脑故障、系统重装或更换设备而丢失了数百小时的《艾尔登法环》游…...

XUnity.AutoTranslator:Unity游戏实时翻译插件的终极使用指南

XUnity.AutoTranslator:Unity游戏实时翻译插件的终极使用指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而错过心仪的外语游戏?XUnity.AutoTranslator…...

文本特征工程核心技术解析与应用实践

1. 文本特征工程的本质与价值文本数据就像一座未经雕琢的矿山,原始文本中蕴含着大量有价值的信息,但需要经过专业处理才能被机器学习模型有效利用。我在处理客户服务工单分类项目时,曾遇到一个典型案例:原始工单文本直接输入模型时…...

独立开发者实录:我做了一款呼吸 App,动画同步踩了三个坑才做对

你有没有做过一个动画,逻辑上完全正确,跑起来就是差一帧?我在呼吸 App 的引导动画上卡了很久。 「呼吸视界」是我自己做来用的——开会前容易焦虑,试过市面上几款呼吸 App,要么广告满天飞,要么 UI 花里胡哨…...

Vector CANoe安装后必做的5件事:从软件配置到第一个Demo工程运行

Vector CANoe安装后必做的5件事:从软件配置到第一个Demo工程运行 当你第一次双击桌面上的CANoe图标时,可能会被复杂的界面和众多功能选项弄得不知所措。安装完成只是开始,真正的挑战在于如何让这个强大的工具为你所用。本文将带你完成五个关键…...

别光看手册了!实战教你用Synopsys AXI VIP的Port Monitor搭建高效Scoreboard

实战指南:用Synopsys AXI VIP的Port Monitor构建高可靠Scoreboard 在复杂SoC验证环境中,AXI总线事务的准确捕获与高效比对是验证工程师面临的核心挑战之一。许多工程师虽然熟悉Synopsys AXI VIP的基本用法,却在将其深度集成到验证环境时遇到瓶…...

UV Squares终极指南:3分钟掌握Blender UV网格优化技巧

UV Squares终极指南:3分钟掌握Blender UV网格优化技巧 【免费下载链接】UvSquares Blender addon for reshaping UV quad selection into a grid. 项目地址: https://gitcode.com/gh_mirrors/uv/UvSquares 你是否曾在Blender中为混乱的UV布局而头疼&#xff…...

GPS定位的‘第一印象’:从手机冷启动到车载导航,聊聊TTFF背后那些影响用户体验的工程细节

GPS定位的‘第一印象’:从手机冷启动到车载导航,聊聊TTFF背后那些影响用户体验的工程细节 当你在陌生城市打开打车软件,或是启动车载导航寻找最近的加油站时,那个转动的定位图标背后隐藏着一场精密的时空交响乐。首次定位时间&…...

Flink DataStream API避坑指南:从匿名内部类到Lambda,你的reduce和keyBy真的写对了吗?

Flink DataStream API避坑指南:从匿名内部类到Lambda的深度优化实践 当开发者从Flink入门迈向进阶时,常常会遇到一个关键转折点——如何将示例代码转化为真正健壮的生产级实现。DataStream API作为Flink核心编程接口,其看似简单的算子背后隐藏…...

避坑指南:N32G45x移植LVGL到SPI屏,DMA配置的这些细节你注意了吗?

N32G45x移植LVGL到SPI屏的DMA配置避坑指南 移植LVGL到N32G45x系列MCU的SPI接口LCD屏幕时,DMA配置往往是开发者最容易踩坑的环节。本文将深入剖析几个关键细节问题,帮助开发者快速定位和解决常见的显示异常。 1. 常见问题现象与初步诊断 当DMA配置不当时&…...

QMC音频一键解锁神器:彻底告别QQ音乐格式限制

QMC音频一键解锁神器:彻底告别QQ音乐格式限制 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经在QQ音乐下载了心爱的歌曲,想要在其他设备上…...

从‘增删改查’到用户故事:PlantUML用例图实战,教你识别真正的系统功能边界

从用户目标到系统边界:用PlantUML用例图重构设计思维 在软件开发领域,我们常常陷入一种技术陷阱——把数据库的"增删改查"直接映射为系统功能,却忽略了用户真正的需求本质。这种功能分解式的设计思维,往往导致系统边界模…...

基于Docker部署AI语音合成服务:从VITS模型到私有化TTS实战

1. 项目概述:从“墨灵”镜像看AI语音合成工具的平民化之路最近在折腾一些AI应用,发现一个挺有意思的Docker镜像,叫gojue/moling。这名字乍一看有点摸不着头脑,但如果你对AI语音合成领域有所关注,尤其是中文TTS&#xf…...

5分钟快速上手:PCL启动器 - 最友好的Minecraft游戏启动解决方案

5分钟快速上手:PCL启动器 - 最友好的Minecraft游戏启动解决方案 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher(PCL)。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL 想要轻松玩转Minecraft却苦于复杂的启动过程&a…...

别再手动挂载了!Linux服务器间用NFS共享文件夹,5分钟搞定开机自动挂载(CentOS 7实战)

告别手动挂载:NFS共享文件夹在CentOS 7上的自动化实践 每次服务器重启后都要重新挂载共享文件夹?这种重复性工作不仅浪费时间,还容易因疏忽导致服务中断。本文将带你彻底解决这一痛点,实现Linux服务器间文件共享的"一劳永逸&…...

Multi-Agent 任务分配算法:实现负载均衡与高效协作的核心逻辑

Multi-Agent 任务分配算法:实现负载均衡与高效协作的核心逻辑 作者:老周 | 15年分布式系统/多智能体研发经验 | 资深架构师、技术博主 本文字数:10247字 | 预计阅读时间:25分钟 | 建议收藏后反复阅读 大家好,我是老周,最近半年一直在帮多家企业落地基于大模型的Multi-Age…...

告别混乱!用MD04/MD07/ZMD06看懂SAP物料可用性,采购与生产计划不再抓瞎

SAP物料可用性实战指南:从MD04到ZMD06的高效决策路径 每天清晨,当供应链计划员、采购专员和生产调度员打开SAP系统时,面对MD04事务码中密密麻麻的物料需求数据,最迫切需要解答的三个问题是:哪些物料会短缺?…...

LazyLLM:低代码多智能体应用框架,简化AI开发与部署

1. 项目概述:LazyLLM,为“懒人”而生的多智能体应用构建框架如果你和我一样,在尝试构建一个像样的AI应用时,感到无比头疼——不是被各种框架的API调用、服务部署、模型切换、数据流编排搞得焦头烂额,就是被“快速迭代”…...

UABEA:下一代跨平台Unity资源编辑器完全指南

UABEA:下一代跨平台Unity资源编辑器完全指南 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 在当今游戏开发与模组制作领域,高效处理Unity资源包已成为开发者面临的核心挑战之一…...

HEIF Utility:Windows用户处理iPhone照片的终极解决方案

HEIF Utility:Windows用户处理iPhone照片的终极解决方案 【免费下载链接】HEIF-Utility HEIF Utility - View/Convert Apple HEIF images on Windows. 项目地址: https://gitcode.com/gh_mirrors/he/HEIF-Utility 还在为Windows电脑无法查看iPhone拍摄的HEIF…...