如何从 docker-compose.yml 运行 命令启动 couchdb

How to run commands from docker-compose.yml to start couchdb

我有一个用 Django 编写的 Web 应用程序,我需要将其与 CouchDB 连接,两者都 运行正在 docker 容器上。 django 会将数据存储在名为“test”的 couchdb table 中。所以我需要在沙发数据库中创建“测试”table。但是我无法弄清楚如何实现这一点,因为没有好的 material 可供参考。我已经尝试了下面的代码,但是它抛出了以下错误,因为 couchdb 没有启动并且 运行ning。有什么方法可以使用 docker-compose.yml 或任何其他替代方法在 couchdb 中创建 table。

我使用 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

组合文件中使用的 command 覆盖启动数据库的 Dockerfile 中的 CMD。

首先想到的是覆盖 CMD 以启动数据库 AND 执行 curls,但是由于数据库的初始化方式,这将不起作用.

更好的方法是使用一个辅助容器来对数据库执行 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"]