当前位置: 首页 > 面试题库 >

扩展CouchDB Docker映像

郭建华
2023-03-14
问题内容

我正在尝试扩展CouchDB docker映像以预填充CouchDB(带有初始数据库,设计文档等)。

为了创建一个名为的数据库db,我首先尝试了以下缩写Dockerfile

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

但是构建失败,因为在构建时尚未启动ouchdb服务。所以我将其更改为:

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

注意:

  • 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映像中:

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

$ curl localhost:5984/_all_dbs
[]

问题答案:

大多数标准Docker数据库映像都包含VOLUME一行,以防止使用预填充的数据创建派生映像。对于官方couchdb图像,您可以在中看到相关行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


 类似资料:
  • Hi这似乎适用于添加额外的方法,但不适用于在现有方法上添加新的注释。假设我们有以下课程:

  • 因此,当我将对象转换为JSON字符串时: dob以以下方式写入JSON字符串: “dob”:{“年份”:1964,“月份”:“二月”,“纪年”:{“日历类型”:“ISO8601”,“ID”:“ISO”},“月份值”:2,“DayofMonth”:13,“DayofWeek”:“星期四”,“Era”:“CE”,“DayofYear”:44,“LeapYear”:true 所以,我不知道我是如何做到这

  • 问题内容: 我使用的是官方的Elasticsearch Docker映像, 而不是设置自己的elasticsearch实例。效果很好,直到我想要扩展它为止。我想在该ElasticSearch实例中安装奇迹以获取更多信息。 现在dockerfile / elasticsearch会自动运行ElasticSearch并将命令设置为不起作用,也不会附加到容器或尝试通过SSH访问它,也不会使用来安装ssh

  • 这类似于JPA映射带有继承的视图和表,但由于接受的答案不能让我满意,所以我决定问自己的问题。 我有一个基于类,它包含所有实体的公共字段 我想像现在一样读/写,但我不知道如何映射,以便JPA查询可以使用它。我用做了一些努力,但没有成功。如果我将中的所有字段复制到中,那么我的应用程序将按预期运行,但这并不适合我。如何映射视图以便使用继承?

  • 关于MapStruct的问题。我有这样的情况,我从基实体扩展类,但不知道如何映射它。这是我的箱子。 BaseEntity: 基础: 没有显示错误,在映射器实现(生成的代码)中没有该ID的映射:

  • 扩展是专门设计的在 Yii 应用中随时可拿来使用的, 并可重发布的软件包。例如, yiisoft/yii2-debug 扩展在你的应用的每个页面底部添加一个方便用于调试的工具栏, 帮助你简单地抓取页面生成的情况。 你可以使用扩展来加速你的开发过程。 信息: 本文中我们使用的术语 "扩展" 特指 Yii 软件包。而用术语 "软件包" 和 "库" 指代非 Yii 专用的通常意义上的软件包。 使用扩展