django - 如何从 docker-compose.yml 运行命令来启动 couchdb
问题描述
我有一个用 django 编写的 webapp,我需要与 couchdb 连接,两者都在 docker 容器上运行。django 会将数据存储在名为“test”的 couchdb 表中。所以我需要在沙发数据库中创建“测试”表。但我无法弄清楚如何实现这一点,因为没有好的材料可供参考。我已经尝试了下面的代码,但它抛出了以下错误,因为 couchdb 没有启动并运行。有没有办法使用 docker-compose.yml 或任何其他替代方法在 couchdb 中创建一个表。
我docker-compose up
用来运行容器
码头工人-compose.yml
version: '3'
services:
web:
build: .
command: python ./webapp/server.py
volumes:
- .:/code
- ./webapp/static:/static
networks:
- couchserver_network
depends_on:
- couchserver
couchserver:
image: couchdb
ports:
- "5984:5984"
command: curl -u rob:123456 -X PUT localhost:5984/_users && curl -u rob:123456 -X PUT localhost:5984/test
environment:
- COUCHDB_USER=rob
- COUCHDB_PASSWORD=123456
volumes:
- ./dbdata:/opt/couchdb/data
networks:
- couchserver_network
networks:
couchserver_network:
driver: bridge
抛出错误:
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (7) Failed to connect to localhost port 5984: Connection refused
如果我删除“命令:curl -u rob:123456 -X PUT localhost:5984/_users && curl -u rob:123456 -X PUT localhost:5984/test ”行,则会引发以下错误:
couchserver_1 | {database_does_not_exist,[{mem3_shards,load_shards_from_db,"_users",[{file,"src/mem3_shards.erl"},{line,399}]},....
这是我的 Dockerfile :
FROM python:3.6-slim-buster
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
非常感谢任何形式的帮助
另一个查询:以下几行是做什么的。我是 docker 新手,这是我第一次接触它
volumes:
- ./dbdata:/opt/couchdb/data
解决方案
compose 文件中使用的command
将覆盖启动数据库的 Dockerfile 中的 CMD。
首先要考虑的是覆盖 CMD 以启动数据库并执行卷曲,但这将由于数据库的初始化方式而不起作用。
更好的方法是使用一个辅助容器来对数据库执行 curl 命令。
这是一个将创建所需数据库的最小示例:
version: '3'
services:
couchserver:
image: couchdb
ports:
- "5984:5984"
environment:
- COUCHDB_USER=rob
- COUCHDB_PASSWORD=123456
volumes:
- ./dbdata:/opt/couchdb/data
initializer:
image: curlimages/curl
deploy:
restart_policy:
condition: on-failure
depends_on:
- couchserver
command: ["sh","-c","sleep 15 && curl -u rob:123456 -X PUT couchserver:5984/_users && curl -u rob:123456 -X PUT couchserver:5984/test"]
推荐阅读
- javascript - 获取 Latt 和 lon 地理位置数据 - 我如何确定 N/S/E/W 并将它们添加到末尾
- python - 为什么在类中循环返回索引为 0 而不是 0,1,2,3...等?
- mysql - 将 UPDATE 查询合并为一个 SQL 查询
- php - 试图在 Laravel 中创建一个禁止按钮。不要得到任何错误只是找不到 - Laravel 8
- linux-kernel - LTTng/Perf:用于退出 (sched_process_exit) 和释放 (sched_process_free) 进程的事件之间的区别
- java - 如何有条件地初始化静态数组
- reactjs - 使用“@react-google-maps/api”重叠标记蜘蛛
- c++ - 指向被覆盖的值的指针(访问异常)
- python - 将所有依赖项打包到 Python 脚本中的最简单方法(不是 EXE)
- php - 如何在 php 和 mysql 中使用适当的回复来组织评论?