
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
。除非在Kubernetes等环境中使用mTLS sidecar,否则不建议禁用TLS,因为这会导致连接不安全。
挂载自定义数据库文件
运行Docker镜像时,可挂载自定义DuckDB数据库文件(数据库必须使用DuckDB 1.1.1版本构建):
前提条件:安装DuckDB CLI 1.1.1版本并确保可执行文件在PATH中。
平台下载链接:
生成TPC-H Scale Factor 1 (1GB)数据库文件并挂载运行:
bash# 在主机的/tmp目录生成TPC-H数据库 pushd /tmp duckdb ./tpch_sf1.duckdb << EOF .bail on .echo on SELECT VERSION(); INSTALL tpch; LOAD tpch; CALL dbgen(sf=1); EOF # 运行sqlflite容器并挂载主机数据库文件 docker run --name sqlflite \ --detach \ --rm \ --tty \ --init \ --publish 31337:31337 \ --env TLS_ENABLED="1" \ --env SQLFLITE_PASSWORD="sqlflite_password" \ --pull missing \ --mount type=bind,source=$(pwd),target=/opt/sqlflite/data \ --env DATABASE_FILENAME="data/tpch_sf1.duckdb" \ voltrondata/sqlflite:latest
运行初始化SQL命令
可通过设置INIT_SQL_COMMANDS环境变量指定启动时执行的SQL命令(用分号分隔):
bashdocker run --name sqlflite \ --detach \ --rm \ --tty \ --init \ --publish 31337:31337 \ --env TLS_ENABLED="1" \ --env SQLFLITE_PASSWORD="sqlflite_password" \ --env PRINT_QUERIES="1" \ --env INIT_SQL_COMMANDS="SET threads = 1; SET memory_limit = '1GB';" \ --pull missing \ voltrondata/sqlflite:latest
也可通过INIT_SQL_COMMANDS_FILE环境变量指定包含SQL命令的文件路径(文件需挂载到容器内)。
注意:对于DuckDB后端,会自动执行以下初始化命令:
SET autoinstall_known_extensions = true; SET autoload_known_extensions = true;注意:返回结果的SELECT语句不会显示结果;执行失败的初始化命令会导致服务器中止并退出非零代码。
通过JDBC连接
下载Apache Arrow Flight SQL JDBC驱动,使用以下JDBC连接字符串:
bashjdbc:arrow-flight-sql://localhost:31337?useEncryption=true&user=sqlflite_username&password=sqlflite_password&disableCertificateVerification=true
注意:若重启容器后使用相同密码连接JDBC可能出现"Invalid bearer token provided"错误,需修改
SQLFLITE_PASSWORD环境变量并使用新密码连接。
通过ADBC Python Flight SQL驱动连接
ADBC提供比JDBC更好的性能,减少序列化/反序列化,保持数据列格式。
安装依赖:
bash# 创建Python虚拟环境 python3 -m venv .venv # 激活虚拟环境 . .venv/bin/activate # 安装依赖 pip install --upgrade pip pip install pandas pyarrow adbc_driver_flightsql # 启动Python交互shell python
在Python shell中执行:
pythonimport os from adbc_driver_flightsql import dbapi as sqlflite, DatabaseOptions with sqlflite.connect(uri="grpc+tls://localhost:31337", db_kwargs={"username": os.getenv("SQLFLITE_USERNAME", "sqlflite_username"), "password": os.getenv("SQLFLITE_PASSWORD", "sqlflite_password"), DatabaseOptions.TLS_SKIP_VERIFY.value: "true" # 使用可信CA签名证书时不需要 } ) as conn: with conn.cursor() as cur: cur.execute("SELECT n_nationkey, n_name FROM nation WHERE n_nationkey = ?", parameters=[24] ) x = cur.fetch_arrow_table() print(x)
预期结果:
textpyarrow.Table n_nationkey: int32 n_name: string ---- n_nationkey: [[24]] n_name: [["UNITED STATES"]]
通过sqlflite_client CLI工具连接
sqlflite_client CLI工具已内置于Docker镜像,也可作为独立可执行文件下载:
bashsqlflite_client \ --command Execute \ --host "localhost" \ --port 31337 \ --username "sqlflite_username" \ --password "sqlflite_password" \ --query "SELECT version()" \ --use-tls \ --tls-skip-verify
预期结果:
textResults from endpoint 1 of 1 Schema: version(): string Results: version(): [ "v1.1.1" ] Total: 1
通过Ibis连接
详见:https://github.com/ibis-project/ibis-sqlflite
通过SQLAlchemy连接
详见:https://github.com/prmoore77/sqlalchemy-sqlflite-adbc-dialect
bashdocker stop sqlflite
下载最新版本的sqlflite_server CLI可执行文件:
运行命令:
bashSQLFLITE_PASSWORD="sqlflite_password" sqlflite_server --database-filename data/some_db.duckdb --print-queries
查看所有选项:
bashsqlflite_server --help
bashgit clone https://github.com/voltrondata/sqlflite --recurse-submodules cd sqlflite # 构建并安装静态库和可执行文件 cmake -S . -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local cmake --build build --target install
bashpython3 -m venv .venv . .venv/bin/activate pip install --upgrade pip setuptools wheel pip install --requirement ./requirements.txt
bashwget https://github.com/lovasoa/TPCH-sqlite/releases/download/v1.0/TPC-H-small.db -O ./data/TPC-H-small.sqlite
bashpython "scripts/create_duckdb_database_file.py" \ --file-name="TPC-H-small.duckdb" \ --file-path="data" \ --overwrite-file=true \ --scale-factor=0.01
bashpushd tls ./gen-certs.sh popd
bashSQLFLITE_PASSWORD="sqlflite_password" sqlflite_server --database-filename data/TPC-H-small.duckdb --print-queries
默认使用DuckDB后端,可通过--backend或-B参数切换:
bashSQLFLITE_PASSWORD="sqlflite_password" sqlflite_server --database-filename data/TPC-H-small.duckdb
或
bashSQLFLITE_PASSWORD="sqlflite_password" sqlflite_server -B duckdb -D data/TPC-H-small.duckdb
bashSQLFLITE_PASSWORD="sqlflite_password" sqlflite_server -B sqlite -D data/TPC-H-small.sqlite
或
bashSQLFLITE_PASSWORD="sqlflite_password" sqlflite_server --backend sqlite --database-filename data/TPC-H-small.sqlite
运行sqlflite_server --help查看所有可用选项:
bashsqlflite_server --help Allowed options: --help 显示帮助信息 --version 打印版本信息并退出 -B [ --backend ] arg (=duckdb) 指定数据库后端,允许选项:duckdb, sqlite -H [ --hostname ] arg 指定服务器监听主机名,未设置则使用环境变量SQLFLITE_HOSTNAME,默认0.0.0.0 -R [ --port ] arg (=31337) 指定服务器监听端口 -D [ --database-filename ] arg 指定数据库文件路径(绝对路径或相对当前工作目录) -U [ --username ] arg 指定允许连接的用户名,未设置则使用环境变量SQLFLITE_USERNAME,默认sqlflite_username -P [ --password ] arg 指定连接密码,未设置则使用环境变量SQLFLITE_PASSWORD,未设置时服务器将启动失败 -S [ --secret-key ] arg 指定用于签名JWT的密钥,未设置则使用环境变量SECRET_KEY,未设置时生成随机密钥 -T [ --tls ] arg 指定TLS证书和密钥文件路径 -I [ --init-sql-commands ] arg 指定启动时执行的SQL命令,未设置则使用环境变量INIT_SQL_COMMANDS -F [ --init-sql-commands-file ] arg 指定包含启动SQL命令的文件路径,未设置则使用环境变量INIT_SQL_COMMANDS_FILE -M [ --mtls-ca-cert-filename ] arg 指定用于验证客户端的mTLS CA证书路径(PEM格式) -Q [ --print-queries ] 将客户端执行的查询打印到标准输出
提供不包含Python、TLS证书生成和示例数据库的精简镜像。必须提供以下环境变量:
DATABASE_FILENAME - 数据库文件路径SQLFLITE_PASSWORD - 服务器密码可选环境变量:
TLS_ENABLED - 设置为"1"启用TLS(默认"0"禁用)TLS_CERT - 启用TLS时,TLS证书文件路径(需挂载到容器)TLS_KEY - 启用TLS时,TLS密钥文件路径(需挂载到容器)运行命令:
bashdocker run --name sqlflite-slim \ --detach \ --rm \ --tty \ --init \ --publish 31337:31337 \ --env DATABASE_FILENAME="data/some_database.duckdb" \ --env TLS_ENABLED="0" \ --env SQLFLITE_PASSWORD="sqlflite_password" \ --env PRINT_QUERIES="1" \ --pull missing \ voltrondata/sqlflite:latest-slim
详见容器入口脚本start_sqlflite_slim.sh。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务