You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Docker容器启动CouchDB时如何创建_users数据库?

解决CouchDB启动时_users数据库不存在的错误

问题场景

你的Dockerfile配置如下:

FROM couchdb:latest
EXPOSE 5984
COPY local.ini /opt/couchdb/etc/

尽管在local.ini中配置了[admins]段,启动时仍报错:

[error] 2022-11-06T17:55:49.799365Z nonode@nohost emulator -------- Error in process <0.15793.0> with exit value:
{database_does_not_exist,[{mem3_shards,load_shards_from_db,"_users",[{file,"src/mem3_shards.erl"},{line,400}]},{mem3_shards,load_shards_from_disk,1,[{file,"src/mem3_shards.erl"},{line,375}]},{mem3_shards,load_shards_from_disk,2,[{file,"src/mem3_shards.erl"},{line,404}]},{mem3_shards,for_docid,3,[{file,"src/mem3_shards.erl"},{line,97}]},{fabric_doc_open,go,3,[{file,"src/fabric_doc_open.erl"},{line,39}]},{chttpd_auth_cache,ensure_auth_ddoc_exists,2,[{file,"src/chttpd_auth_cache.erl"},{line,198}]},{chttpd_auth_cache,listen_for_changes,1,[{file,"src/chttpd_auth_cache.erl"},{line,145}]}]}

错误原因

配置[admins]后,CouchDB会依赖_users系统数据库完成权限校验,但首次启动时该数据库未被自动初始化;同时直接覆盖local.ini可能丢失默认配置,导致初始化流程异常。

解决方案

方案1:用环境变量设置管理员(推荐)

无需手动修改local.ini,通过官方支持的环境变量配置管理员,CouchDB会自动完成_users等系统数据库的初始化:

  • 启动容器时传入变量:
docker run -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=your_secure_password -p 5984:5984 your-couchdb-image
  • 或写入Dockerfile:
FROM couchdb:3.3.2  # 建议指定具体版本,避免latest标签的兼容性问题
EXPOSE 5984
ENV COUCHDB_USER=admin
ENV COUCHDB_PASSWORD=your_secure_password

方案2:保留默认配置+手动初始化系统数据库

若坚持使用自定义local.ini,需按以下步骤操作:

  1. 继承默认配置:先从官方CouchDB镜像中拷贝默认local.ini,在其基础上添加[admins]段,不要完全覆盖原文件。
  2. 添加初始化脚本:在容器启动时自动创建系统数据库,创建init-dbs.sh脚本:
#!/bin/bash
# 等待CouchDB启动完成
sleep 10
# 创建系统数据库
curl -X PUT http://localhost:5984/_users
curl -X PUT http://localhost:5984/_replicator
curl -X PUT http://localhost:5984/_global_changes
  1. 修改Dockerfile:
FROM couchdb:3.3.2
EXPOSE 5984
COPY local.ini /opt/couchdb/etc/
# 配置文件权限修正
RUN chown couchdb:couchdb /opt/couchdb/etc/local.ini
# 添加初始化脚本
COPY init-dbs.sh /docker-entrypoint-initdb.d/
RUN chmod +x /docker-entrypoint-initdb.d/init-dbs.sh

额外注意

  • 避免使用latest标签,指定具体CouchDB版本可减少版本迭代带来的兼容问题。
  • 确保local.ini的所有者为couchdb用户,否则会因权限问题导致配置无法加载。

内容的提问来源于stack exchange,提问作者Alex R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:30:57