很多团队本地试 Ollama 很顺,一到容器化就卡住:模型下到容器里、重启就没了;数据卷挂错位置,拉了几十 G 白下;端口只绑了 127.0.0.1,别的容器连不上;有卡却忘了透传,跑起来是纯 CPU。这篇按「镜像—挂载—端口—GPU—验证」的顺序,把每一步该确认什么讲清楚,参数只给方向,具体数值你去站内页面核对。
本地装 Ollama 跑得好好的,一放进容器就出问题,这种情况太常见了。模型下到容器里,容器一删就没了;数据卷挂错位置,拉了几十 G 白下;端口只绑了本机地址,隔壁容器死活连不上;机器上明明有卡,跑起来却是纯 CPU 在扛。这些坑基本都能靠一份固定的配置顺序避开。
下面按「镜像选型—目录挂载—端口暴露—GPU 透传—验证维护」走一遍,每一步只给判断标准和要确认什么,具体镜像规格与配置字段你去站内页面核对当时的数字,别照抄别人的参数。
先想清楚:Ollama 用容器跑图什么
容器化主要换来环境一致、模型目录能整体搬走、以及和别的服务塞进同一套编排里。如果只是自己一台机器上偶尔用,原生安装反而少一层折腾,改版本、调驱动都更直接。判断值不值得,先看有没有「迁移」和「编排」这两个需求。
- 谁要访问它:只有本机、同宿主机其他容器、还是局域网别的机器,这直接决定后面监听地址和端口映射怎么配
- 要不要跟着团队镜像版本一起走:需要频繁切版本的,容器更省事;只固定用某一版不动的,容器收益有限
- 机器上的卡是不是要反复调显存占用:调参阶段用原生更容易观察,稳定后再容器化
- 有没有多服务编排的诉求:已经用编排工具管其他服务,把 Ollama 加进去比单独裸装更统一
镜像怎么选、版本标签怎么读
镜像名优先用官方仓库,别用来路不明的第三方镜像,尤其别用那种为了减体积动过目录结构的。标签分固定版本和滚动最新两类:生产环境锁固定版本,尝鲜才用滚动标签,滚动标签某天变了行为你会找不到原因。
CPU 变体和 GPU 变体通常是分开的镜像标签,选错了后面再怎么透传显卡也不生效。拉之前先确认宿主机驱动和容器运行时是否满足要求,把镜像的标签、体积、架构写进部署记录,换机器时照抄。
| 确认项 | 怎么确认 | 不满足时的现象 |
|---|---|---|
| 镜像来源 | 是否官方仓库、标签是否固定版本 | 更新后行为突变或镜像来源不可信 |
| 变体类型 | 标签是否区分 CPU / GPU | 透传了卡但容器里识别不到 |
| 宿主运行时 | 容器运行时是否支持对应硬件 | 容器启动报错或性能异常低 |
| 架构 | 和宿主机架构是否一致 | 镜像拉不下来或进程直接退出 |
挂载:模型目录和配置目录分开管
模型存储目录必须挂到宿主机的卷上,否则容器重建模型全丢,得从头再拉。模型卷和配置文件分开挂:卷挂目录,配置可以挂单个文件,方便改一处不影响数据。
- 先确认容器内默认路径别照抄别人文章里的相对路径,先进一个临时容器看镜像里模型和配置的默认目录在哪,再决定挂载点。
- 在宿主机建好目录并设属主容器里跑的用户 ID 和宿主机目录权限经常打架,写不进去就是这里的问题。按容器内实际用户设好属主再挂。
- 用命名卷或宿主路径挂模型目录整目录挂进去,不要整个根目录挂;重建容器时先挂回同一个卷,再考虑拉模型。
- 验证写入启动后拉一个小模型到卷里,去宿主机对应目录确认文件真的落盘了,而不是留在容器可写层。
端口暴露与 GPU 透传
默认配置通常只对本机生效,要让同宿主机其他容器或者局域网机器访问,得同时做两件事:把应用监听地址改成对外,再做端口映射。只做端口映射不改监听地址,外面照样连不上;只改监听不映射,只能宿主机自己用。
改监听地址等于把这个接口暴露出去,公网机器上必须配防火墙,最好只放内网访问,具体风险口径去 安全与合规 页面看。GPU 透传靠容器运行时实现,宿主机驱动、运行时版本、镜像变体三者要对上;只有 CPU 在跑时,先确认容器里能不能识别到卡,别一上来就怀疑模型。
| 场景 | 监听地址 | 端口映射 | GPU 透传 |
|---|---|---|---|
| 只有本机用 | 不需要改 | 可免 | 按需 |
| 同宿主机其他容器访问 | 需要改 | 需要 | 按需 |
| 局域网其他机器访问 | 需要改 | 需要 | 按需 |
| 需要硬件加速 | 按需 | 按需 | 必须配上且三者匹配 |
要不要上卡、上几张合适,别凭感觉。先用 几张卡够用:按模型算一遍 估一遍,再决定透传多少资源,避免卡占了但吞吐没上去。
跑起来之后怎么验证、怎么长期维护
验证分三层,一层层过,别跳:容器内进程是否起来;宿主机映射端口是否可连;通过接口发一次真实推理请求能不能拿到返回。三层顺序过一遍,问题基本能定位到是哪一段。
- 看容器日志,确认没有启动即退出或反复重启
- 进容器确认模型目录里确实有模型文件
- 从宿主机和其他容器分别测一次端口连通性
- 发一次实际推理请求,看返回内容和耗时
- 记下这版镜像标签和挂载路径,方便回退
升级前先挂一份测试模型卷试跑,确认可用再切生产,同时保留上一个镜像标签方便回退。响应慢的,先量延迟基线再谈优化,具体基线怎么测、当时的数据如何,去 接口测速:先量出你的延迟基线 核对。
常见故障按这个顺序排查:容器日志 → 挂载路径是否存在且可写 → 端口是否被占用 → 卡是否被识别 → 模型是否已拉取。前面几层没问题再去动模型和参数,否则容易白折腾。
下一步镜像规格、显卡选型和当时的数字都在站内,配之前先去核对一遍,比自己试错省时间。→常见问题
模型放容器里和放宿主机卷,有区别吗?
有,且很关键。放容器里,容器重建或删除就全没了,等于每次重新下载。放宿主机卷,模型只下一遍,换镜像、换容器都能复用。做法是把宿主机一个目录挂进容器,让 Ollama 把模型写在那里。具体挂哪个路径,看你选的镜像默认值,别照抄别人的相对路径。
容器里跑起来但显卡没生效,从哪查?
按顺序查四步:容器里能不能识别到设备;宿主机驱动版本是否满足要求;容器运行时是否装好并配置为默认;镜像是不是 GPU 变体。四项里任何一项不对,结果都是退回 CPU 跑,表现是能出结果但特别慢。先确认卡认没认到,再去调模型参数,否则白折腾。
要不要给 Ollama 容器配鉴权?
默认接口本身不带强鉴权,一旦监听地址放开到局域网或公网,同网段的人都能调。判断标准很简单:只有本机访问就不用管;要给别的机器或别的容器用,就放在内网并加一层反向代理做鉴权,公网直连基本不要考虑。密钥相关的配置口径可以在站内 安全与合规(/safety) 对照。