Livebook 0.19.10 Docker Compose 部署指南

在一台 Linux 服务器上用 Docker Compose 从零部署 Livebook 0.19.10(GHCR 官方镜像、密码认证、命名卷持久化),覆盖镜像选型、首次登录验证、升级回滚实测与加速器白名单/DATA_PATH/端口冲突排障实录。

LivebookLivebook2026/10/31

Livebook 0.19.10 Docker Compose 部署指南

目标:在一台 Linux 服务器上用 Docker Compose 从零部署 Elixir 生态交互式协作 Notebook——Livebook 0.19.10(hex.pm 当前最新稳定版),完成镜像选型、密码认证、首次登录验证、数据持久化与升级回滚的完整闭环。软件定位与选型背景见 《Livebook 0.19.10 介绍与选型指南》。全文命令与回显均在真实环境(Linux x86_64 服务器,Docker Server 29.9.2 + Docker Compose v5.6.1)实测通过,测试日期 2026-10-31。

一、环境信息

本次部署的目标软件与环境如下:

项目值
部署对象Livebook 0.19.10(hex.pm 官方包页当前最新稳定版,查询日期 2026-10-31)
软件定位Elixir 生态交互式协作 Notebook(Phoenix Web 应用)
镜像ghcr.io/livebook-dev/livebook:0.19.10(镜像内 release 目录实测为 /app/lib/livebook-0.19.10)
服务器系统Linux x86_64
DockerServer 29.9.2
Docker Composev5.6.1(v2 插件形态,docker compose 子命令)
访问端口8137(Web,映射容器 8080)、8138(iframe 资源,映射容器 8081)
数据形态命名卷 livebook-data 挂载到 /data(笔记本目录 + 内部配置目录合一)
认证方式LIVEBOOK_PASSWORD 密码认证
测试日期2026-10-31

版本取证:Livebook 0.19.10 为 hex.pm 官方包页展示的最新版本(2026-10-31 查询),同时实测镜像内 ls /app/lib/ 输出 livebook-0.19.10,两者一致。

二、镜像选型说明

2.1 官方镜像源与 Tag 策略

Livebook 官方在两个镜像仓库同步发布:

镜像仓库说明
livebook/livebookDocker Hub官方 Docker Hub 镜像(官方 README 与部署文档引用),走 docker.io 源,国内加速器覆盖面广
ghcr.io/livebook-dev/livebookGitHub Container Registry官方 GitHub 仓库镜像(官方 README Docker 章节主推),Tag 齐全:latest、nightly、固定版本号、cuda-*(CUDA 支持)

本次部署锁定 ghcr.io/livebook-dev/livebook:0.19.10(固定版本 tag,升级回滚只需换 tag)。

⚠️ 加速器排障实录:宿主配置了带白名单的镜像加速器(daocloud 源)时,从 Docker Hub 拉取 livebook/livebook:0.19.10 实测失败,报错原文:

Error response from daemon: error from registry: 🚫 👀-> https://github.com/DaoCloud/public-image-mirror/issues/2328 🔗 这镜像不在白名单. this image is not in the allowlist.

处理:改从 GHCR 直连 ghcr.io/livebook-dev/livebook:0.19.10 成功;或检查 /etc/docker/daemon.json 的 registry-mirrors 白名单。遇到拉取失败先分清报错来自镜像名错误还是加速器拦截。

2.2 拉取镜像

docker pull ghcr.io/livebook-dev/livebook:0.19.9

实测回显(0.19.9 拉取,用于后文升级回滚演练):

0.19.9: Pulling from livebook-dev/livebook
Digest: sha256:22c9a4f0a5836f52f7c6cf30a1467a4646c1fb27a2a7aea1ed793e4735658562
Status: Image is up to date for ghcr.io/livebook-dev/livebook:0.19.9
ghcr.io/livebook-dev/livebook:0.19.9

Status: Image is up to date 表示本地已有该层缓存(0.19.9 与 0.19.10 共享基础层),零下载完成。查看本地镜像(本环境 Docker 29 的镜像列表新增 DISK USAGE/CONTENT SIZE 列):

docker images ghcr.io/livebook-dev/livebook

实测回显:

IMAGE                                   ID             DISK USAGE   CONTENT SIZE   EXTRA
ghcr.io/livebook-dev/livebook:0.19.0    b43d135567e9        990MB          274MB        
ghcr.io/livebook-dev/livebook:0.19.10   216af978b930       1.03GB          283MB   U    
ghcr.io/livebook-dev/livebook:0.19.9    22c9a4f0a583       1.02GB          282MB        
ghcr.io/livebook-dev/livebook:latest    216af978b930       1.03GB          283MB   U    

镜像约 1.03GB(含完整 Elixir/OTP 运行时与依赖)。镜像入口为 Cmd=[/app/bin/server](docker inspect 实测),启动脚本内先拉起 epmd 再 exec ./livebook start。

三、前置条件

部署前逐项确认:

  1. Docker 与 Compose 可用:
docker version --format 'Server: {{.Server.Version}}'
docker compose version

实测回显:

Server: 29.9.2
Docker Compose version v5.6.1
  1. 宿主端口未占用:容器内固定监听 8080(Web)与 8081(iframe 资源),需映射宿主端口。本文选 8137/8138,先确认未被占用:
ss -ltn | grep -E ':(8137|8138)\b' || echo "8137/8138 空闲"

实测回显:

8137/8138 空闲

⚠️ 端口排障实录:最初选用 8131,docker compose up -d 实测报 failed to bind host port 0.0.0.0:8131/tcp: address already in use——端口在编网阶段才报错,先 ss -ltn 排查再落 compose 可少走弯路。

  1. 密码规划:本文使用演示口令 q1w2e3r4q1w2e3r4。注意 Livebook 强制要求 LIVEBOOK_PASSWORD 至少 12 个字符(官方 README),故将常规 8 位演示口令 q1w2e3r4 翻倍为 16 位以满足要求;短于 12 位启动即报错(实测回显见 §11.5)。

  2. 网络规划:如需固定容器网段,先确认目标子网未被占用:

docker network ls -q | xargs docker network inspect 2>/dev/null | grep -oE '"Subnet": "10\.89\.[0-9]+\.0/24"'

实测回显(部署时刻):

"Subnet": "10.89.56.0/24"
"Subnet": "10.89.57.0/24"
"Subnet": "10.89.64.0/24"

⚠️ 子网排障实录:compose 内声明了 10.89.58.0/24,但若该网段已被某张手工创建的网络占用,docker compose up -d 实测报 invalid pool request: Pool overlaps with other one on this address space。本文最终由 compose 自建网络(去掉手工同名网络后正常),固定网段仅用于多栈互通场景,纯单栈部署可省略 networks 段。

四、部署步骤

4.1 编写 docker-compose.yaml

在部署目录(本文为 /opt/livebook,按你的服务器惯例调整)创建 docker-compose.yaml:

name: livebook-0.19.10-stack

services:
  livebook:
    image: ghcr.io/livebook-dev/livebook:0.19.10
    container_name: livebook-0.19.10
    restart: unless-stopped
    ports:
      - "8137:8080"
      - "8138:8081"
    environment:
      LIVEBOOK_PASSWORD: q1w2e3r4q1w2e3r4
      LIVEBOOK_DATA_PATH: /data
      LIVEBOOK_NODE: livebook@127.0.0.1
      LIVEBOOK_COOKIE: livebook-cookie-2026
    volumes:
      - livebook-data:/data
    networks:
      - livebook-net

networks:
  livebook-net:
    driver: bridge
    ipam:
      config:
        - subnet: 10.89.58.0/24

volumes:
  livebook-data:

逐项说明:

项说明
name: livebook-0.19.10-stack显式项目名;compose 会把版本号中的点规整掉,实际资源前缀为 livebook-01910-stack(如 livebook-01910-stack_livebook-data)
image固定版本 tag,升级/回滚只改这一行
container_name固定实例名,便于 docker exec/日志排查
restart: unless-stopped宿主重启后自愈(实测进程被 :init.stop() 停止后也会被拉起,见 §10.3)
ports宿主 8137 → 容器 8080(Web)、8138 → 容器 8081(iframe 资源端口,无 TLS 场景由主站引用)
LIVEBOOK_PASSWORD登录口令,≥12 字符
LIVEBOOK_DATA_PATH内部配置与状态目录;指向的目录必须已存在,官方推荐直接指向挂载点 /data(根因与排障见 §7.1)
LIVEBOOK_NODE/LIVEBOOK_COOKIE可选。开启 Erlang 分发(远程执行运维命令用),单机可省略;取值见 《Livebook 0.19.10 配置参数详解》
volumes命名卷持久化 /data——它同时是 LIVEBOOK_HOME(笔记本默认目录,镜像内置默认值 LIVEBOOK_HOME=/data)与 LIVEBOOK_DATA_PATH
networks/ipam固定网段,非必需;仅多栈互通或防网段漂移时保留

4.2 启动服务

docker compose up -d

实测回显:

 Volume livebook-01910-stack_livebook-data Creating
 Volume livebook-01910-stack_livebook-data Created
 Container livebook-0.19.10 Creating
 Container livebook-0.19.10 Created
 Container livebook-0.19.10 Starting
 Container livebook-0.19.10 Started

4.3 状态与日志验证

docker compose ps

实测回显(启动约 1 分钟后,健康检查转绿):

NAME               IMAGE                                   COMMAND             SERVICE    CREATED         STATUS                   PORTS
livebook-0.19.10   ghcr.io/livebook-dev/livebook:0.19.10   "/app/bin/server"   livebook   3 minutes ago   Up 3 minutes (healthy)   0.0.0.0:8137->8080/tcp, [::]:8137->8080/tcp, 0.0.0.0:8138->8081/tcp, [::]:8138->8081/tcp
docker logs livebook-0.19.10 2>&1 | head -5

实测回显(设置密码认证时,日志不含 token):

[Livebook] Application running at http://localhost:8080/

💡 对比:若未设置 LIVEBOOK_PASSWORD,默认走 token 认证,日志实测回显为 [Livebook] Application running at http://localhost:8080/?token=<随机令牌>——首次访问必须携带该 token,生产部署务必设置密码。

宿主端口监听验证:

ss -ltn | grep 8137

实测回显:

LISTEN 0      4096         0.0.0.0:8137       0.0.0.0:*
LISTEN 0      4096            [::]:8137          [::]:*

镜像自带健康检查(docker inspect livebook-0.19.10 --format '{{json .Config.Healthcheck}}' 实测):

{"Test":["CMD-SHELL","wget --no-verbose --tries=1 --spider http://localhost:${LIVEBOOK_PORT-8080}/public/health || exit 1"]}

即每轮用 wget --spider 探测容器内 /public/health 端点,宿主上也可直接验证:

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8137/public/health

实测回显:

200

4.4 首次登录验证

浏览器访问 http://<服务器IP>:8137/,未认证请求被重定向到登录页:

curl -s -o /dev/null -w 'GET / -> %{http_code} redirect=%{redirect_url}\n' http://127.0.0.1:8137/

实测回显:

GET / -> 302 redirect=http://127.0.0.1:8137/authenticate

登录页(/authenticate)含一个密码输入框(页面表单实测字段为 password + _csrf_token)。输入 q1w2e3r4q1w2e3r4 提交后进入主页。用 curl 等价验证:

# 错误口令:页面回显登录表单(200),不跳转
curl -s -o /dev/null -w '%{http_code}\n' -X POST http://127.0.0.1:8137/authenticate -d 'password=wrongpass123'
# 正确口令:302 跳回主页并发会话 Cookie
curl -s -c /tmp/lb-cookie.txt -o /dev/null -w '%{http_code} -> %{redirect_url}\n' -X POST http://127.0.0.1:8137/authenticate -d 'password=q1w2e3r4q1w2e3r4'
# 携带会话访问主页
curl -s -b /tmp/lb-cookie.txt -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8137/

实测回显:

200
302 -> http://127.0.0.1:8137/
200

登录成功后主页即 Livebook 工作台(笔记本列表、新建笔记本、内置 Learn 教程)。至此部署完成。

五、数据持久化说明

Livebook 的落盘数据分两类,本文方案统一落在命名卷 livebook-data(容器内 /data):

数据位置(容器内)由谁控制
笔记本文件(.livemd)/data 根目录及子目录(LIVEBOOK_HOME=/data 为镜像内置默认值,文件选择器默认从此处打开)用户在 UI 保存/上传
内部配置与状态/data/livebook_config.v1.ets 等(LIVEBOOK_DATA_PATH=/data)Livebook 自动维护

启动后查看卷内实际内容:

docker exec livebook-0.19.10 ls -la /data

实测回显:

total 12
drwxr-xr-x 2 root root 4096 Oct 31 02:56 .
drwxr-xr-x 1 root root 4096 Oct 31 02:56 ..
-rw-r--r-- 1 root root  889 Oct 31 02:56 livebook_config.v1.ets

留存验证:向卷内写入一个演示笔记本(等价于 UI 里保存的文件),随后跨版本升级再检查(见 §10.4),实测 upgrade-demo.livemd 在 0.19.10 → 0.19.9 → 0.19.10 两次换版本后完整保留。

docker exec livebook-0.19.10 sh -c 'printf "# 升级回滚验证\n\n## Markdown 段落\n\n本文件用于验证升级/回滚后 notebook 数据留存。\n" > /data/upgrade-demo.livemd && ls -la /data/'

实测回显:

total 16
drwxr-xr-x 2 root root 4096 Oct 31 03:10 .
drwxr-xr-x 1 root root 4096 Oct 31 03:04 ..
-rw-r--r-- 1 root root  862 Oct 31 03:06 livebook_config.v1.ets
-rw-r--r-- 1 root root  105 Oct 31 03:10 upgrade-demo.livemd

⚠️ 会话不持久:LIVEBOOK_SECRET_KEY_BASE 默认每次启动随机生成(官方 README),登录会话 Cookie 随重启全部失效,需重新登录。若希望重启后免登录,须显式固定该变量(生成方法见 《Livebook 0.19.10 配置参数详解》)。

六、环境变量表

本文 compose 用到的变量(完整 LIVEBOOK_* 变量体系与生产模板见 《Livebook 0.19.10 配置参数详解》):

变量本文取值默认值说明
LIVEBOOK_PASSWORDq1w2e3r4q1w2e3r4未设(token 认证)登录口令,≥12 字符,设置后 token 认证自动关闭
LIVEBOOK_DATA_PATH/data用户数据目录下 livebook/内部配置目录;目录必须已存在,官方 Dockerfile 模板亦显式 mkdir -p /data
LIVEBOOK_NODElivebook@127.0.0.1未设(不启用分发)Erlang 长名节点名(必须 FQDN 或 IP);供 livebook rpc 等运维命令使用
LIVEBOOK_COOKIElivebook-cookie-2026每次启动随机分发 cookie,与服务端一致才能远程连接
LIVEBOOK_PORT未设8080Web 端口(容器内),本文用宿主端口映射改对外端口,不改容器内值
LIVEBOOK_IFRAME_PORT未设8081iframe 资源端口(容器内),同样经端口映射对外
LIVEBOOK_HOME未设(镜像内置 /data)操作系统用户 HOME笔记本文件默认目录;镜像内已预置为 /data(docker inspect 实测 LIVEBOOK_HOME=/data)
LIVEBOOK_IP未设(镜像内置 ::)127.0.0.1(直装时)监听地址;镜像内置 LIVEBOOK_IP=::(双栈任意地址),容器场景无需改动

镜像内置默认值取证(docker inspect ... --format '{{json .Config.Env}}' 实测节选):

["PATH=/usr/local/sbin:...","LANG=C.UTF-8","HOME=/home/livebook","LIVEBOOK_IP=::","LIVEBOOK_HOME=/data"]

七、配置参数说明

7.1 LIVEBOOK_DATA_PATH 必须指向已存在的目录

这是 Livebook 0.19.10 部署中最容易踩的坑。若把 LIVEBOOK_DATA_PATH 设为一个不存在的子目录(如 /data/.livebook-data),启动实测直接崩溃并无限重启:

ERROR!!! [Livebook] expected LIVEBOOK_DATA_PATH to be a writable directory: /data/.livebook-data

根因定位(官方源码 lib/livebook/config.ex v0.19.10,查询日期 2026-10-31):启动检查 writable_dir?/1 仅做一次 File.stat(path) 并要求 type: :directory 且 access 为 :read_write——它不创建目录,路径不存在时 stat 报 enoent 直接判定不可写。而 /data/.livebook-data 需要父目录 /data 挂载后才有机会创建,首启时序上不存在。

解决方案(官方推荐做法):LIVEBOOK_DATA_PATH 直接指向挂载点本身 /data(官方部署指南的 Dockerfile 模板即 ENV LIVEBOOK_DATA_PATH="/data" 并显式 RUN mkdir -p /data)。改后重启实测日志正常输出 [Livebook] Application running at http://localhost:8080/。

7.2 端口与监听

  • 容器内 Web 端口固定 8080、iframe 端口 8081,对外换端口一律用宿主映射(8137:8080),不改 LIVEBOOK_PORT——改了的话健康检查命令 ${LIVEBOOK_PORT-8080} 与映射关系都要跟着动;
  • LIVEBOOK_IP 镜像已内置 ::(IPv4/IPv6 双栈任意地址),ss 回显同时出现 0.0.0.0:8137 与 [::]:8137 两条 LISTEN 与之对应。

7.3 分发相关可选变量

LIVEBOOK_NODE + LIVEBOOK_COOKIE 开启 Erlang 分发,是使用 livebook rpc 远程执行运维命令的前提(不设时实测 livebook pid 报 Cannot run --rpc-eval if the node is not alive)。单机部署可以不设;完整行为与运维命令实测见 《Livebook 0.19.10 常用 CLI 命令详解》。

八、配置文件挂载

Livebook 没有传统配置文件,配置全部通过环境变量注入;需要挂载的是数据目录。两种方案对比:

方案命令形态优点缺点
命名卷(本文方案)volumes: ["livebook-data:/data"]不依赖宿主目录属主;compose down 不删数据;迁移靠 docker volume宿主直接查看需进卷路径
绑定挂载- /opt/livebook/data:/data宿主可直接浏览/备份 .livemd 文件,与 Git 工作流契合需处理属主:官方 README 建议加 -u $(id -u):$(id -g) 让落盘文件归属宿主用户

绑定挂载方案的官方推荐形态(官方 README 原文命令):

docker run -p 8080:8080 -p 8081:8081 --pull always -u $(id -u):$(id -g) -v $(pwd):/data ghcr.io/livebook-dev/livebook

两种方案的 /data 语义完全一致(笔记本目录 + 内部配置目录),切换时先停服再迁移卷数据即可。备份策略:定期备份整个 /data(.livemd 笔记本 + livebook_config.v1.ets 配置)。

九、等价 docker run

本文 compose 的等价单命令(用于快速试用或无 compose 环境验证):

docker run -d \
  --name livebook-0.19.10 \
  --restart unless-stopped \
  -p 8137:8080 \
  -p 8138:8081 \
  -e LIVEBOOK_PASSWORD=q1w2e3r4q1w2e3r4 \
  -e LIVEBOOK_DATA_PATH=/data \
  -e LIVEBOOK_NODE=livebook@127.0.0.1 \
  -e LIVEBOOK_COOKIE=livebook-cookie-2026 \
  -v livebook-data:/data \
  ghcr.io/livebook-dev/livebook:0.19.10

与 compose 版逐项对应:端口映射、环境变量、命名卷、重启策略一致;官方 README 的最小试用形态则更简(docker run -p 8080:8080 -p 8081:8081 ghcr.io/livebook-dev/livebook,token 认证、数据不持久)。生产建议沿用 compose 固定 tag + 持久卷形态。

十、常用运维命令

10.1 日常状态与日志

docker compose ps                          # 健康状态(healthy)
docker logs -f livebook-0.19.10            # 跟踪日志(启动行:[Livebook] Application running at http://localhost:8080/)
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8137/public/health   # 探活,实测 200

10.2 重启与停止

docker compose restart    # 重启服务(实测回显 Container livebook-0.19.10 Restarting / Started)
docker compose stop       # 停止
docker compose up -d      # 再次拉起
docker compose down       # 停止并移除容器与网络(命名卷保留)

⚠️ docker compose down 不会删除命名卷 livebook-01910-stack_livebook-data;确认废弃才执行 docker volume rm livebook-01910-stack_livebook-data(先备份 .livemd)。

10.3 进程内优雅停机与自愈

实例开启分发变量后(见 §7.3),可走 release 自带 RPC 优雅停机,实测:

docker exec livebook-0.19.10 /app/bin/livebook rpc ':init.stop()'

实测回显(无输出即停机指令已送达),随后观察到:容器进程退出 → restart: unless-stopped 自动拉起 → 健康检查数秒内恢复:

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8137/public/health

实测回显(自动拉起后):

200

10.4 升级与回滚(实测)

Livebook 数据(.livemd + 配置)与程序版本解耦,升级/回滚 = 换镜像 tag + 重建容器。实测完整流程:

第 1 步:降级演练(0.19.10 → 0.19.9)。修改 compose 中 image 为 ghcr.io/livebook-dev/livebook:0.19.9 后执行:

docker compose up -d

实测回显:

 Container livebook-0.19.10 Recreated
 Container livebook-0.19.10 Starting
 Container livebook-0.19.10 Started

版本与数据验证:

docker exec livebook-0.19.10 /app/bin/livebook version   # 实测:livebook 0.19.9
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8137/public/health   # 实测:200
docker exec livebook-0.19.10 ls /data | head -5

实测回显(upgrade-demo.livemd 完整保留):

livebook_config.v1.ets
upgrade-demo.livemd

第 2 步:升级回切(0.19.9 → 0.19.10)。把 image 改回 0.19.10 再次 docker compose up -d,实测 livebook 0.19.10、健康检查 200、cat /data/upgrade-demo.livemd 内容逐字保留:

# 升级回滚验证

## Markdown 段落

💡 回滚要点:回滚 = 把 tag 改回旧版本执行 docker compose up -d,数据卷不动即零丢失。唯二需要留意的:(1) 新版本可能在内部配置 ETS 中写入新结构,跨大版本回滚前先备份卷;(2) LIVEBOOK_SECRET_KEY_BASE 未固定时,每次重建容器都会话失效、需重新登录(§5)。

十一、常见问题

Q1:拉取镜像报「不在白名单 / not in the allowlist」? 加速器拦截(实测报错原文见 §2.1)。改用 GHCR 源 ghcr.io/livebook-dev/livebook,或清理 /etc/docker/daemon.json 的 registry-mirrors 后重试。

Q2:启动即崩溃重启,日志报 expected LIVEBOOK_DATA_PATH to be a writable directory? LIVEBOOK_DATA_PATH 指向的目录不存在。Livebook 不自动创建该目录(官方源码 config.ex 的 writable_dir?/1 仅 stat 不 mkdir,实测见 §7.1)。把取值改为挂载点 /data,或确保目录先建好。

Q3:docker compose up -d 报 address already in use? 宿主端口被占(实测 8131 被占报 failed to bind host port 0.0.0.0:8131/tcp: address already in use)。ss -ltn 换一个空闲端口,同步改 compose 的 ports。

Q4:docker compose up -d 报 invalid pool request: Pool overlaps with other one on this address space? compose 声明的子网与已有网络重叠(实测见 §三)。换空闲网段,或删掉占用网段的手工网络,或干脆去掉 networks 段让 compose 自建。

Q5:登录页提示密码错误 / 密码是多少? 密码即 compose 里的 LIVEBOOK_PASSWORD(本文 q1w2e3r4q1w2e3r4)。设置过短(<12 字符)启动会直接报错(实测回显见下),不会出现「服务正常但密码不生效」:

ERROR!!! [Livebook] cannot start Livebook because LIVEBOOK_PASSWORD must be at least 12 characters

Q6:每次重启都要重新登录? LIVEBOOK_SECRET_KEY_BASE 默认每次启动随机(官方 README),会话 Cookie 签名失效。设固定值(openssl rand -base64 48 生成,≥64 字符)即可跨重启保持会话;过短实测报 must be at least 64 characters。

十二、参考链接

  1. 《Livebook 0.19.10 介绍与选型指南》——软件定位、架构与同类对比
  2. 《Livebook 0.19.10 配置参数详解》——全部 LIVEBOOK_* 环境变量逐项详解与生产模板
  3. 《Livebook 0.19.10 常用 CLI 命令详解》——release 运维命令与 escript CLI 实测
  4. 官方 README(Docker 章节/环境变量章节/安全章节):https://github.com/livebook-dev/livebook (查询日期 2026-10-31)
  5. 官方 Docker 部署指南(docker.md,Compose/K8s 模板):https://github.com/livebook-dev/livebook/blob/v0.19.10/docs/deployment/docker.md (查询日期 2026-10-31)
  6. 版本取证(hex.pm 官方包页):https://hex.pm/packages/livebook (查询日期 2026-10-31)
Livebook 0.19.10 Docker Compose 部署指南 - Quzuo