我最近开始尝试使用 Docker,在代码部署(即节点服务器)方面,它工作得非常好。然而,在部署 CouchDB 服务器时,它带来了挑战。挑战性可能与我对这个主题的无知有关。
当前设置:持续部署到AWS EC2实例
问题:每次部署都会清除数据库并重新安装couchDB
最终目标:部署不应删除并重新安装数据库。如果提供了 Couchdb 配置,则应仅更新该配置(即关闭管理员模式、添加用户等)
Dockerfile:非常简单:FROM couchdb:latest
我可以使用哪些方法来实现这一点?
答案1
您必须使您的数据卷持久化。
1.选项:
将主机目录挂载到容器中
docker run -rm -p 5984:5984 -v /srv/db_files:/usr/local/var/lib/couchdb --name couchdb klaemo/couchdb:1.6.1
2.选项:
数据存储区容器(重新创建 Couchdb 容器后不会重置)
创建数据存储区
docker create -v /usr/local/var/lib/couchdb --name 数据存储 busybox:latest /bin/true
(也可以将主机目录挂载到数据存储容器中)
docker create -v /srv/db_files:/usr/local/var/lib/couchdb --name 数据存储 busybox:latest /bin/true
使用数据存储区
docker run -d --volumes-from 数据存储-p 5984:5984 --name db1 klaemo/couchdb bash
答案2
我认为在不清除整个服务器的情况下配置 CouchDB 的最佳方法是使用 curl 运行脚本。
例如,您可以使用以下脚本启用 CORS(我使用的是 Windows,并且转义与 UNIX 不同),因此我创建了一个包含以下内容的 BAT 文件:
set host=%1
echo %host%
if [%host%] == [] (
SET host=http://localhost:32770
)
curl -X PUT %host%/_config/httpd/enable_cors -d "\"true\""
curl -X PUT %host%/_config/cors/origins -d "\"*\""
curl -X PUT %host%/_config/cors/credentials -d "\"true\""
curl -X PUT %host%/_config/cors/methods -d "\""GET, PUT, POST, HEAD, DELETE\""
curl -X PUT %host%/_config/cors/headers -d "\"accept, authorization, content-type, origin, referer, x-csrf-token\""
curl -X PUT %host%/mydb
NodeJS 有一个插件可以为您执行相同的 CORS 配置:https://github.com/pouchdb/add-cors-to-couchdb。
使用 curl 您可以更改所需的所有配置,包括创建数据库、用户和记录。