Aur*_*ien 5 couchdb docker dockerfile
I\xe2\x80\x99m 尝试扩展 CouchDB docker 映像以预填充 CouchDB(使用初始数据库、设计文档等)。
\n\n为了创建一个名为 的数据库db,我首先尝试了这个初始Dockerfile:
FROM couchdb\nRUN curl -X PUT localhost:5984/db\nRun Code Online (Sandbox Code Playgroud)\n\n但由于 couchdb 服务在构建时尚未启动,因此构建失败。所以我把它改成了这样:
\n\nFROM 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\nRun Code Online (Sandbox Code Playgroud)\n\n笔记:
\n\nsleep是我发现让它工作的唯一方法,因为它不适用于curl选项--connect-timeout,curl只是检查数据库是否已创建。构建似乎工作正常:
\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\nRun Code Online (Sandbox Code Playgroud)\n\n奇怪的是,现在当我将其作为容器启动时,数据库db似乎没有保存到test3图像中:
$ docker run -p 5984:5984 -d test3\nb34ad93f716e5f6ee68d5b921cc07f6e1c736d8a00e354a5c25f5c051ec01e34\n\n$ curl localhost:5984/_all_dbs\n[]\nRun Code Online (Sandbox Code Playgroud)\n
大多数标准 Docker 数据库映像都包含一行VOLUME,阻止使用预填充数据创建派生映像。对于官方couchdb图像,您可以在其 中看到相关行Dockerfile。与关系数据库映像不同,此映像不支持首次启动时运行的脚本。
这意味着您需要从主机或另一个容器进行初始化。如果您可以使用其 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\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1813 次 |
| 最近记录: |