Dolt Docker 镜像使用指南:从 CLI 容器到 SQL Server 容器化部署

发布时间:2026/9/30 2:04:08
Dolt Docker 镜像使用指南:从 CLI 容器到 SQL Server 容器化部署 数据库关系型数据库后端CLI【免费下载链接】doltDolt – Git for Data项目地址https://gitcode.com/GitHub_Trending/do/dolt点击查看免费下载Dolt 是一个Git for Data的关系型数据库——它是一套可以像 Git 仓库一样 fork、clone、branch、merge、push、pull 的 SQL 数据库同时又兼容 MySQL 协议与 SQL 语法。官方为 Dolt 提供两套 Docker 镜像dolthub/doltCLI 工具镜像与dolthub/dolt-sql-serverSQL Server 服务镜像本指南基于仓库 docker/README.md、docker/serverREADME.md 及配套的 docker/Dockerfile、docker/serverDockerfile、docker/docker-entrypoint.sh完整讲解这两套镜像的用法、构建方式、环境变量与配置挂载机制读完即可在本地用 Docker 快速启动一个可版本控制的 MySQL 兼容数据库。镜像与仓库布局docker/目录是 Dolt 官方容器化方案的全部资产对应两种交付形态dolthub/dolt面向 Dolt 命令行CLI无参数运行时等价于在容器内执行dolt命令dolthub/dolt-sql-server面向 Dolt SQL Server 服务模式等价于在容器内执行dolt sql-server --host 0.0.0.0 --port 3306。两者的构建文件与初始化脚本分别是文件作用docker/Dockerfile构建 CLI 镜像基于ubuntu:22.04docker/serverDockerfile构建 SQL Server 镜像支持从预编译二进制或本地源码构建docker/docker-entrypoint.shSQL Server 镜像的入口脚本负责初始化用户、数据库与初始化 SQLdocker/README.md / docker/serverREADME.md两份镜像的使用文档使用 CLI 镜像一个容器化的 Dolt 命令行CLI 镜像的定位很纯粹镜像内只有一个可直接执行的dolt二进制任何dolt支持的子命令都能以容器参数的形式传入。无参数运行即打印命令帮助$ docker run dolthub/dolt:latest Valid commands for dolt are init - Create an empty Dolt data repository. status - Show the working tree status. add - Add table changes to the list of staged table changes. diff - Diff a table. reset - Remove table changes from the list of staged table changes. clean - Remove untracked tables from working set. commit - Record changes to the repository. sql - Run a SQL query against tables in repository. sql-server - Start a MySQL-compatible server. sql-client - Starts a built-in MySQL client. log - Show commit logs. branch - Create, list, edit, delete branches. checkout - Checkout a branch or overwrite a table from HEAD. merge - Merge a branch. conflicts - Commands for viewing and resolving merge conflicts. cherry-pick - Apply the changes introduced by an existing commit. revert - Undo the changes introduced in a commit. clone - Clone from a remote data repository. fetch - Update the database from a remote data repository. pull - Fetch from a dolt remote data repository and merge. push - Push to a dolt remote. config - Dolt configuration. remote - Manage set of tracked repositories. backup - Manage a set of server backups. login - Login to a dolt remote host. creds - Commands for managing credentials. ls - List tables in the working set. schema - Commands for showing and importing table schemas. table - Commands for copying, renaming, deleting, and exporting tables. tag - Create, list, delete tags. blame - Show what revision and author last modified each row of a table. constraints - Commands for handling constraints. migrate - Executes a database migration to use the latest Dolt data format. read-tables - Fetch table(s) at a specific commit into a new dolt repo gc - Cleans up unreferenced data from the repository. filter-branch - Edits the commit history using the provided query. merge-base - Find the common ancestor of two commits. version - Displays the current Dolt cli version. dump - Export all tables in the working set into a file.这份命令清单与仓库根 README.md 中dolt命令帮助完全一致也与源码go/cmd/dolt/commands/下各命令模块一一对应init.go、status.go、add.go、commit.go、sql.go、sqlserver/、clone.go、branch.go、merge.go等见 go/cmd/dolt/commands。该镜像的主要价值是作为基础镜像你可以基于dolthub/dolt:latest定制自己的数据流水线镜像把dolt init、dolt sql、dolt commit等操作固化到自定义流程里。CLI 镜像构建细节docker/Dockerfile 的实现值得留意# syntaxdocker/dockerfile:1.3-labs FROM ubuntu:22.04 ARG DOLT_VERSION RUN apt update -y \ apt install -y \ curl \ git \ tini \ ca-certificates \ apt clean \ rm -rf /var/lib/apt/lists/* # we install dolt with the install.sh script, which will determine the platform/arch of the container # and install the proper dolt binary RUN bash -c curl -L https://github.com/dolthub/dolt/releases/download/v${DOLT_VERSION}/install.sh | bash RUN /usr/local/bin/dolt version WORKDIR /var/lib/dolt ENTRYPOINT [tini, --, /usr/local/bin/dolt]几个设计要点ARG DOLT_VERSION构建参数通过--build-arg DOLT_VERSIONx.y.z指定要安装的 Dolt 版本官方install.sh脚本安装脚本会自动探测容器平台与 CPU 架构并下载对应二进制保证多架构如linux/amd64、linux/arm64下都能拿到正确版本tini作为 PID 1ENTRYPOINT [tini, --, /usr/local/bin/dolt]使用tini做容器主进程正确转发信号并回收僵尸进程——这保证了在 Kubernetes 等环境执行docker stop时dolt能被优雅终止WORKDIR /var/lib/dolt容器内数据目录默认为/var/lib/dolt挂载卷时以它为挂载点即可持久化数据。使用 SQL Server 镜像MySQL 兼容的服务端dolthub/dolt-sql-server镜像的行为与官方mysql镜像类似启动即拉起dolt sql-server监听0.0.0.0:3306。想查看dolt sql-server支持的全部选项直接传--help$ docker run dolthub/dolt-sql-server:latest --help构建镜像的三种方式docker/serverREADME.md 给出了三种DOLT_VERSION取值对应三种构建策略1. 构建最新发布版构建时自动向 GitHub API 查询最新版本号$ docker build -f docker/serverDockerfile --build-arg DOLT_VERSIONlatest -t dolt-sql-server:latest .2. 构建指定版本$ docker build -f docker/serverDockerfile --build-arg DOLT_VERSION1.59.7 -t dolt-sql-server:1.59.7 .3. 从本地源码构建适合参与 Dolt 开发、或想验证未发布改动$ docker build -f dolt/docker/serverDockerfile --build-arg DOLT_VERSIONsource -t dolt-sql-server:source .⚠️ 从源码构建时工作目录下不能存在其他以dolt开头的文件夹因为 Dockerfile 使用通配符COPY dolt*/go*/go.mod* ...条件式拷贝源码目录其他dolt*目录可能导致构建失败。源码构建要求工作区至少包含dolt/其他依赖仓库需自行在 serverDockerfile 中补充COPY。多阶段构建与二进制来源docker/serverDockerfile 采用多阶段构建把二进制来源与运行时解耦download-binary阶段当DOLT_VERSIONlatest时通过 GitHub API 抓取最新 tag然后下载官方install.sh安装二进制指定具体版本时直接下载对应 releasebuild-from-source阶段当DOLT_VERSIONsource时在golang:1.26.2-bookworm镜像中执行go mod download并go build -o /usr/local/bin/dolt ./cmd/dolt即构建仓库中 go/cmd/dolt 的主入口runtime阶段基于debian:bookworm-slim安装bzip2 gzip xz-utils zstd等压缩工具用于解压后续初始化用的.sql.gz等文件并从上面两个阶段之一拷贝二进制最后执行/usr/local/bin/dolt version做冒烟校验。运行时阶段还定义了三个关键路径与声明RUN mkdir /docker-entrypoint-initdb.d mkdir -p /var/lib/dolt VOLUME /var/lib/dolt EXPOSE 3306 33060 7007 ENTRYPOINT [tini, --, docker-entrypoint.sh]/docker-entrypoint-initdb.d/初始化 SQL 脚本目录后文详述/var/lib/dolt数据卷挂载点3306/33060/7007SQL 端口、MySQL X 协议端口以及 Dolt 远程 API 端口入口同样用tini包裹 docker/docker-entrypoint.sh保证信号正确处理。从宿主机连接容器内的 SQL Server容器默认只允许rootlocalhost连接——这是 Dolt 1.46.0 起引入的安全特性防止未授权远程访问。若不想先docker exec进容器再连 SQL Server可用两个环境变量控制root超级用户的初始化DOLT_ROOT_HOST覆盖 root 的允许来源主机DOLT_ROOT_PASSWORD覆盖 root 密码默认空。下面把 root 开放给任意主机并设置密码 docker run -e DOLT_ROOT_PASSWORDsecret2 -e DOLT_ROOT_HOST% -p 3307:3306 dolthub/dolt-sql-server:latest宿主机上即可用任意 MySQL 兼容客户端连接 mysql --host 0.0.0.0 -P 3307 -u root -p secret2安全提示将 root 开放给%任意主机时必须设置强密码。若仅需本机访问保持默认localhost即可。两种服务端配置方式方式一命令行参数dolt sql-server的命令行参数可以直接追加在docker run末尾例如启用 debug 日志并关闭自动提交$ docker run -p 3307:3306 dolthub/dolt-sql-server:latest -l debug --no-auto-commit其中-l--loglevel与--no-auto-commit等标志的解析定义于源码 go/cmd/dolt/commands/sqlserver/sqlserver.gologLevelFlag loglevel、noAutoCommitFlag no-auto-commit、configFileFlag config等。方式二YAML 配置文件挂载服务端配置目录固定为容器内/etc/dolt/servercfg.d/该目录内只能存在一个.yaml配置文件若有多个入口脚本会告警并回退到默认配置见 docker/docker-entrypoint.sh 中get_config_file_path_if_exists的逻辑。将宿主机目录挂载到该路径$ docker run -p 3307:3306 -v /Users/jennifer/docker/server/:/etc/dolt/servercfg.d/ dolthub/dolt-sql-server:latest入口脚本检测到唯一.yaml后会以--configpath参数启动dolt sql-server。YAML 配置的结构与解析在源码中有测试佐证go/cmd/dolt/commands/sqlserver/server_test.go的TestYAMLServerArgs使用log_level: info与behavior:等键验证配置生效配置文件的加载与dataDir优先级处理可见 go/cmd/dolt/commands/sqlserver/command_line_config.godataDir会被提前取出并转为绝对路径因为服务器启动前就需要确定数据目录。数据目录与 Dolt 全局配置的挂载与服务器配置平行的还有两个特殊目录数据目录/var/lib/dolt/Dolt 数据库文件默认存放位置。容器无需额外配置即可使用但要在宿主机持久化把它挂载为数据卷$ docker run -p 3307:3306 -v /Users/jennifer/docker/databases/:/var/lib/dolt/ dolthub/dolt-sql-server:latestDolt 全局配置目录/etc/dolt/doltcfg.d/存放唯一的.json配置文件。入口脚本发现后会将其拷贝到$HOME/.dolt/config_global.json覆盖容器内默认的 Dolt 全局配置对应 docker/docker-entrypoint.sh 中set_dolt_config_if_defined的实现。另外注意如果docker run在入口脚本执行过程中报错退出需要先用docker rm -f container_name删除上次遗留的容器再重新运行。环境变量一览SQL Server 镜像支持以下环境变量完整继承自 docker/serverREADME.md环境变量作用默认值DOLT_ROOT_PASSWORD设置 root 用户密码空DOLT_ROOT_HOST指定 root 用户的允许来源主机localhostDOLT_DATABASE/MYSQL_DATABASE若指定名称的数据库不存在则创建无DOLT_USER/MYSQL_USER若指定名称的用户不存在则创建无DOLT_PASSWORD/MYSQL_PASSWORD为DOLT_USER/MYSQL_USER指定用户设置密码无DOLT_USER_HOST/MYSQL_USER_HOST指定自定义用户的来源主机回退到DOLT_ROOT_HOST再回退localhostDOLT_SERVER_TIMEOUT服务器启动超时秒0表示不设超时300要点说明均与入口脚本实现一一对应DOLT_*优先于MYSQL_*入口脚本的get_env_var先读DOLT_*再读MYSQL_*因此两种命名都可用且前者优先级更高数据库与用户创建DOLT_DATABASE会触发CREATE DATABASE IF NOT EXISTSDOLT_USER与DOLT_PASSWORD必须成对出现缺密码会直接报错退出只有密码没有用户则告警忽略不允许通过环境变量创建名为root的用户防止与超级用户初始化冲突见 docker/docker-entrypoint.sh 的create_user_from_env权限授予自定义用户会被授予USAGE ON *.*若同时指定了数据库则再授予该库的全部权限GRANT ALL ON db.*root 兜底逻辑服务器启动后脚本会检查mysql.user中是否存在rootDOLT_ROOT_HOST若不存在例如初始化脚本与 root 环境变量的初始化冲突会强制覆盖创建 root 并授予ALL PRIVILEGES ... WITH GRANT OPTION。初始化脚本机制/docker-entrypoint-initdb.d与 MySQL 官方镜像一致SQL Server 镜像支持在首次启动时执行/docker-entrypoint-initdb.d/下的初始化文件该机制移植自docker-library/mysql8.0 的 entrypoint见 docker/docker-entrypoint.sh 的docker_process_init_files。支持的文件类型与处理方式文件类型处理方式*.sh可执行则直接运行否则source导入*.sql通过dolt sql逐条执行*.sql.bz2/*.sql.gz/*.sql.xz/*.sql.zst先由bunzip2/gunzip/xzcat/zstd解压再执行这也解释了 runtime 阶段为何安装这些压缩工具其他告警后忽略执行 SQL 时使用exec_mysql函数它反复重试dolt sql直到成功或超过DOLT_SERVER_TIMEOUT并过滤错误输出、按需--show-result打印结果——这保证了服务器冷启动或资源紧张时初始化脚本仍能可靠执行。初始化完成后会写入.init_completed标记文件避免重复初始化。此外dolt_server_initializer会在后台拉起dolt sql-server --host0.0.0.0 --port3306并轮询 TCP 端口就绪后才继续执行后续初始化因此库/用户创建与初始化脚本都能稳定落到一个活着的服务器上。典型工作流小结想快速体验 Dolt 命令行docker run dolthub/dolt:latest subcommand或基于 docker/Dockerfile 定制自己的镜像想跑一个 MySQL 兼容、可 fork/clone/branch/merge 的数据库服务docker run -e DOLT_ROOT_PASSWORDsecret2 -e DOLT_ROOT_HOST% -p 3307:3306 dolthub/dolt-sql-server:latest再用任意 MySQL 客户端连接需要持久化与自定义配置挂载/var/lib/dolt/数据、/etc/dolt/doltcfg.d/Dolt 全局配置 JSON、/etc/dolt/servercfg.d/服务器 YAML 配置需要初始化数据库结构将*.sql、*.sh放入/docker-entrypoint-initdb.d/首次启动自动执行。整套容器化方案在 docker/ 目录内自洽完整两份 README 负责使用说明两份 Dockerfile 负责两种交付形态的构建一份 entrypoint 脚本负责服务端镜像的初始化编排。如果你需要在此基础上定制镜像例如预置自己的库表、凭证或数据卷策略直接以这两个镜像为基底扩展即可。赞分享数据库关系型数据库后端CLI【免费下载链接】doltDolt – Git for Data项目地址https://gitcode.com/GitHub_Trending/do/dolt点击查看免费下载相关推荐使用 Docker 容器化部署 Create T3 App从 standalone 镜像到 Docker Compose 与 Railway 实战使用 Docker 容器化部署 Create T3 App从 standalone 镜像到 Docker Compose 与 Railway 实战 Creat开发工具CLI代码生成SwiftFormat Docker镜像容器化部署方案SwiftFormat Docker镜像容器化部署方案 引言告别环境一致性难题 你是否曾因团队成员使用不同版本的SwiftFormat导致代码格式化结果不一开发工具代码质量CLIEtcher容器集成Docker容器镜像的部署Etcher容器集成Docker容器镜像的部署 概述 Etcher作为一款强大的跨平台操作系统镜像烧录工具在容器化环境中部署面临独特挑战。本文将深入探讨如何桌面应用开发工具智能硬件上一篇2026最新AI模型推荐GPT-5.5/Anthropic Claude 4.7/Gemini 2.5在AI Automation Suggester中的实战应用下一篇123云盘解锁终极配置指南与完整使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询