扩展 CouchDB Docker 镜像

Aur*_*ien 5 couchdb docker dockerfile

I\xe2\x80\x99m 尝试扩展 CouchDB docker 映像以预填充 CouchDB(使用初始数据库、设计文档等)。

\n\n

为了创建一个名为 的数据库db,我首先尝试了这个初始Dockerfile

\n\n
FROM couchdb\nRUN curl -X PUT localhost:5984/db\n
Run Code Online (Sandbox Code Playgroud)\n\n

但由于 couchdb 服务在构建时尚未启动,因此构建失败。所以我把它改成了这样:

\n\n
FROM couchdb\nRUN service couchdb start && \\ \n  sleep 3 && \\                 \n  curl -s -S -X PUT localhost:5984/db && \\\n  curl -s -S localhost:5984/_all_dbs\n
Run Code Online (Sandbox Code Playgroud)\n\n

笔记:

\n\n
    \n
  • sleep是我发现让它工作的唯一方法,因为它不适用于curl选项--connect-timeout
  • \n
  • 第二个curl只是检查数据库是否已创建。
  • \n
\n\n

构建似乎工作正常:

\n\n
$ docker build . -t test3 --no-cache\nSending build context to Docker daemon  6.656kB\nStep 1/2 : FROM couchdb\n ---> 7f64c92d91fb\nStep 2/2 : RUN service couchdb start &&   sleep 3 &&   curl -s -S -X PUT localhost:5984/db &&   curl -s -S localhost:5984/_all_dbs\n ---> Running in 1f3b10080595\nStarting Apache CouchDB: couchdb.\n{"ok":true}\n["db"]\nRemoving intermediate container 1f3b10080595\n ---> 7d733188a423\nSuccessfully built 7d733188a423\nSuccessfully tagged test3:latest\n
Run Code Online (Sandbox Code Playgroud)\n\n

奇怪的是,现在当我将其作为容器启动时,数据库db似乎没有保存到test3图像中:

\n\n
$ docker run -p 5984:5984 -d test3\nb34ad93f716e5f6ee68d5b921cc07f6e1c736d8a00e354a5c25f5c051ec01e34\n\n$ curl localhost:5984/_all_dbs\n[]\n
Run Code Online (Sandbox Code Playgroud)\n

Dav*_*aze 3

大多数标准 Docker 数据库映像都包含一行VOLUME,阻止使用预填充数据创建派生映像。对于官方couchdb图像,您可以在其 中看到相关行Dockerfile。与关系数据库映像不同,此映像不支持首次启动时运行的脚本。

\n

这意味着您需要从主机或另一个容器进行初始化。如果您可以使用其 HTTP API 直接与其交互,那么这可能如下所示:

\n
# Start the container\ndocker run -d -p 5984:5984 -v ... couchdb\n\n# Wait for it to be up\nfor i in $(seq 20); do\n  if curl -s http://localhost:5984 >/dev/null 2>&1; then\n    break\n  fi\n  sleep 1\ndone\n\n# Create the database\ncurl -XPUT http://localhost:5984/db\n
Run Code Online (Sandbox Code Playgroud)\n