扩展 CouchDB Docker 镜像

2023-11-29

我正在尝试扩展 CouchDB docker 镜像来预填充 CouchDB(使用初始数据库、设计文档等)。

为了创建一个名为db,我首先尝试了这个初始Dockerfile:

FROM couchdb
RUN curl -X PUT localhost:5984/db

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

FROM couchdb
RUN service couchdb start && \ 
  sleep 3 && \                 
  curl -s -S -X PUT localhost:5984/db && \
  curl -s -S localhost:5984/_all_dbs

Note:

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

构建似乎工作正常:

$ docker build . -t test3 --no-cache
Sending build context to Docker daemon  6.656kB
Step 1/2 : FROM couchdb
 ---> 7f64c92d91fb
Step 2/2 : RUN service couchdb start &&   sleep 3 &&   curl -s -S -X PUT localhost:5984/db &&   curl -s -S localhost:5984/_all_dbs
 ---> Running in 1f3b10080595
Starting Apache CouchDB: couchdb.
{"ok":true}
["db"]
Removing intermediate container 1f3b10080595
 ---> 7d733188a423
Successfully built 7d733188a423
Successfully tagged test3:latest

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

$ docker run -p 5984:5984 -d test3
b34ad93f716e5f6ee68d5b921cc07f6e1c736d8a00e354a5c25f5c051ec01e34

$ curl localhost:5984/_all_dbs
[]

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

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

# Start the container
docker run -d -p 5984:5984 -v ... couchdb

# Wait for it to be up
for i in $(seq 20); do
  if curl -s http://localhost:5984 >/dev/null 2>&1; then
    break
  fi
  sleep 1
done

# Create the database
curl -XPUT http://localhost:5984/db
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

扩展 CouchDB Docker 镜像 的相关文章

随机推荐

  • 如何迭代字典?

    我见过几种在 C 中迭代 字典的不同方法 有标准的方法吗 foreach KeyValuePair
  • 当我使用会话将值从一个页面发送到另一个页面时,出现以下错误[重复]

    这个问题在这里已经有答案了 警告 session start 打开 var cpanel php sessions ea php56 sess c84fdb91458e26c7325faf74a529a3 O RDWR 失败 没有这样的文件
  • 获取perl字符串计算结果

    如果一个字符串如下所示 str 5 2 1 我想从该字符串中获取计算结果 如何转换为标量来计算它 谢谢 最简单的方法是 print eval 5 2 1 但这并不安全 print eval print You are hacked 您需要先
  • Laravel - 使用 whereHas 获取最后一行

    我正在尝试获取上次用户活动的时间 created at 我有模型User and UserActivity 我想获取最后一个用户活动并检查该用户的最后一个活动是否是 3 天发送通知 User php
  • 忍者。对内部设置属性的奇怪拦截

    域对象 目标对象 cs public class TargetObject public virtual ChildTargetObject ChildTargetObject get return ChildTargetObjectInn
  • python: 为什么使用子进程调用 echo 会返回 WindowsError 2?

    在我的程序中 我有一个函数 runScript def runScript subprocess call echo hello 我在 Python 文档中看到过很多类似的例子 所以我认为这可行 但是 当我在程序中调用此函数时 它返回 Wi
  • 如何用C++实现“虚拟模板功能”

    首先 我已经阅读过并且现在知道虚拟模板成员函数在 C 中 还 不可能 解决方法是使类成为模板 然后在成员函数中也使用模板参数 但在 OOP 的背景下 我发现如果该类实际上是一个模板 下面的示例就不会很 自然 请注意 该代码实际上不起作用 但
  • 网页抓取 Pokemon 数据

    我试图找出每个神奇宝贝 第一代 可以学习的动作数量 我发现以下网站包含此信息 https pokemondb net pokedex game red blue yellow 这里列出了 151 个 Pokemon 对于每个 Pokemon
  • PHP mysqli_real_escape_string 返回空字符串

    如果我不使用 mysql real escape string 函数 代码可以正常工作 但该函数没有返回任何内容 我读到问题可能是由于我没有 mysql 连接 但情况似乎并非如此 请帮忙
  • shell函数中的“声明”和环境变量的范围

    考虑以下测试片段 这些是文件 declare test 的内容 function do foobar unset FOOBAR declare FOOBAR default FOOBAR override echo At end of do
  • 在 pandas 中生成唯一 ID 列

    我有一个包含三列的数据框 bins x bins y and z 我想添加一个新列unique这是该独特组合的某种 索引 bins x and bins y 以下是我想附加的示例 请注意 为了清楚起见 我对数据框进行了排序 但在此上下文中顺
  • ag-Grid - 在行悬停时显示按钮,就像 Gmail 中一样

    在 ag Grid 中 我想在悬停一行时显示操作按钮 就像在 Gmail 中一样 无论滚动位置如何 操作按钮都必须出现在网格的右端 有提到一种方法https blog ag grid com build email client with
  • 是否可以在for循环语句下完成所有ajax调用后运行代码?

    我有一个for循环语句 每个循环都会执行一个ajax调用 each arr function i v var url xml php id v ajax url url type GET dataType xml success funct
  • oracle数据库中的阿拉伯字符

    亲爱的大家 我正在努力做到以下几点 我想在我的数据库中存储阿拉伯字符 但问题是它们的存储方式是 我尝试过这些功能 msg txt convert msg txt AR8MSWIN1256 AR8ISO8859P6 但我得到了这个错误 ORA
  • Ubuntu 上的 PyXML

    我刚刚完成 Ubuntu 10 10 的全新安装 我正在尝试运行一些使用 xml 和 xpath 的脚本 我从 PyXML 内部收到错误 我认为这是一个安装错误 为了安装它 我执行了以下操作 prompt gt sudo apt get i
  • 将指向同一类型结构体成员的指针分配给另一个指向同一类型结构体的指针

    即使对我来说 这个问题听起来也非常令人困惑 而且它可能看起来很明显或已经得到解答 但我已经搜索了很多 虽然我发现了有趣的东西 但我没有找到完全适合我的问题的答案 这是一些C代码将更好地显示我的疑问 typedef struct Node s
  • MySql 和 Sql Server 是否可以有 EF 上下文?

    我有两个实体框架上下文 一个用于 MySql 一个用于 sql 如果我运行该应用程序 我会收到以下错误 The default DbConfiguration instance was used by the Entity Framewor
  • 如何在 Java 中确定路由器/网关的 IP?

    如何在 Java 中确定路由器 网关的 IP 我可以很容易地获得我的IP 我可以使用网站上的服务获取我的互联网 IP 但我如何确定我的网关的 IP 如果您了解相关方法 那么在 NET 中这有点容易 但在 Java 中如何做到这一点呢 在 W
  • 如何在右边缘水平ListView添加模糊效果以显示还有更多内容

    我想要一种让用户看到他们可以在我的水平 ListView 上水平滚动的方法 提前致谢 Edit 这是我的代码 wcyankees424 Container height 50 child Stack children
  • 扩展 CouchDB Docker 镜像

    我正在尝试扩展 CouchDB docker 镜像来预填充 CouchDB 使用初始数据库 设计文档等 为了创建一个名为db 我首先尝试了这个初始Dockerfile FROM couchdb RUN curl X PUT localhos