我有一个用django编写的web应用程序,我需要将其与couchdb连接,两者都在docker容器上运行。 django将数据存储在名为“ test”的couchdb表中。所以我需要在沙发数据库中创建“测试”表。但是我无法弄清楚如何实现这一目标,因为没有好的材料可供参考。我已经尝试了以下代码,但由于未启动并运行ouchdb,因此会引发以下错误。有没有办法使用docker-compose.yml或任何其他替代方法在ouchdb中创建表。
我使用docker-compose up
运行容器
docker-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
答案 0 :(得分:1)
撰写文件中使用的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"]