Skip to content

Docker

在单个 Docker 容器中运行 Memos,并保持数据持久化

对于单个 Memos 实例而言,Docker 是最简单的生产级部署方式。

快速开始

bash
docker run -d \
  --name memos \
  --restart unless-stopped \
  -p 5230:5230 \
  -v ~/.memos:/var/opt/memos \
  neosmemo/memos:stable
  • 容器监听 5230 端口。
  • Memos 在容器内部的 /var/opt/memos 目录中持久化存储数据。
  • 宿主机的 ~/.memos 包含 SQLite 数据库和本地资源。

镜像标签

一般的标签选项:

  • stable:生产环境上最安全的默认选项
  • 版本化的标签例如 0.28.1:定版部署
  • 类似分支的标签例如 0.28:当前分支的最新打包
  • latest:以开发为主,不适合生产环境

平台支持

此镜像包含多架构清单(multi-arch manifests),会根据环境自动匹配最佳版本:

  • linux/amd64 — x86_64 处理器
  • linux/arm64 — ARM 64-bit (苹果芯片, 树莓派 4+)
  • linux/arm/v7 — ARM 32-bit (树莓派 2/3)

容器用户

Memos 在容器内以非 root 用户运行:

  • UID 10001, GID 10001, 用户名 nonroot
  • 入口脚本自动修复挂载磁盘的所有权

如果你的磁盘需要不同的 UID 或 GID,覆写它们:

bash
docker run -d \
  --name memos \
  -p 5230:5230 \
  -v ~/.memos:/var/opt/memos \
  -e MEMOS_UID=1000 \
  -e MEMOS_GID=1000 \
  neosmemo/memos:stable

环境变量

所有的 MEMOS_* 变量都直接对应命令行的标记,常用的有:

变量默认值意义
MEMOS_PORT8081HTTP 监听端口 (镜像默认是: 5230)
MEMOS_ADDR``监听地址 (为空是监听全部入口)
MEMOS_DATA/var/opt/memos数据目录
MEMOS_DRIVERsqlite数据库
MEMOS_DSNauto数据库连接字符串
MEMOS_INSTANCE_URL``公共实例 URL
MEMOS_DEMOfalseDemo 模式

典型示例:

bash
docker run -d \
  --name memos \
  --restart unless-stopped \
  -p 5230:5230 \
  -v ~/.memos:/var/opt/memos \
  -e MEMOS_PORT=5230 \
  -e MEMOS_DRIVER=sqlite \
  -e MEMOS_INSTANCE_URL=https://memos.example.com \
  neosmemo/memos:stable

外部数据库

SQLite 是默认数据库,并且在单节点部署中表现很好。如果你需要使用 MySQL 或 PostgreSQL,则需要提供:

  • MEMOS_DRIVER=mysql 或者 MEMOS_DRIVER=postgres
  • MEMOS_DSN 使用合适的连接字符串

例如使用 MySQL:

bash
docker run -d \
  --name memos \
  -p 5230:5230 \
  -v ~/.memos:/var/opt/memos \
  -e MEMOS_DRIVER=mysql \
  -e MEMOS_DSN="user:password@tcp(mysql-host:3306)/memos" \
  neosmemo/memos:stable

例如使用 PostgreSQL:

bash
docker run -d \
  --name memos \
  -p 5230:5230 \
  -v ~/.memos:/var/opt/memos \
  -e MEMOS_DRIVER=postgres \
  -e MEMOS_DSN="postgres://user:password@postgres-host:5432/memos?sslmode=disable" \
  neosmemo/memos:stable

当使用外部数据库,挂载的卷依然关联本地的资源和实例数据。

带有 _FILE 后缀的密钥

入口脚本支持 *_FILE 后缀的变量,所以你可以避免使用普通的环境变量传递凭据,取而代之的是使用 Docker 密钥。

bash
echo "postgres://user:password@host:5432/memos" | docker secret create memos_dsn -

docker run -d \
  --name memos \
  -p 5230:5230 \
  -v ~/.memos:/var/opt/memos \
  -e MEMOS_DRIVER=postgres \
  -e MEMOS_DSN_FILE=/run/secrets/memos_dsn \
  --secret memos_dsn \
  neosmemo/memos:stable

这对任何 MEMOS_* 变量都有效。

容器管理

bash
docker logs -f memos
docker stop memos
docker start memos
docker restart memos

升级

bash
docker pull neosmemo/memos:stable
docker stop memos
docker rm memos
docker run -d \
  --name memos \
  --restart unless-stopped \
  -p 5230:5230 \
  -v ~/.memos:/var/opt/memos \
  neosmemo/memos:stable

由于数据存储在挂载卷中,更换容器时只要使用的相同的数据目录并留有备份,通常来说是安全的。

最后更新于:

评论区
评论区空空如也
发送评论
名字
0 / 20
邮箱
0 / 100
评论内容
0 / 140
由于是非实名评论,所以不提供删除功能。如果你需要删除你发送的评论,或者是其他人的评论对你造成了困扰,请 发邮件给我 。同时评论区会使用 AI + 人工的方式进行审核,以达到合规要求。