我想在使用Docker的项目中使用BaseX(在本例中为docker-compose
)。
Web应用程序的常见设置使用一个容器存储数据库,使用另一个容器存储网络服务器。这意味着Web服务器必须通过网络连接到BaseX。
但是,如果我尝试使用basexclient
命令通过网络连接到数据库容器,则会始终出现拒绝访问错误。
另一方面,REST API
似乎有效。
这是我的示例:
docker-compose.yaml:
version: '3'
services:
xmldb:
image: basex/basexhttp:latest
container_name: xmldb
volumes:
- ./res:/eoa/res
- ./runtime_data/basex_data:/srv/basex/data
ports:
- 1984:1984
- 8984:8984
# user: 1000:100
# command:
# - "/usr/local/bin/basexserver"
# eoa-django
webserver:
depends_on:
- db
- xmldb
build: .
image: eoa2_webserver
container_name: eoa2_webserver
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- ./src:/eoa/server
- ./res:/eoa/res
working_dir: /eoa/server
environment:
- INSTALL_DIR=/eoa/server
- RES_DIR=/eoa/res
ports:
- "8000:8000"
# user: 1000:100
Dockerfile:
FROM python:3
ENV PYTHONUNBUFFERED 1
ENV SHELL /bin/bash
# ------------------------------------------
# install necessary packages via apt-get:
# ------------------------------------------
RUN apt-get update && \
apt-get install -y --no-install-recommends \
basex
# ...
# ------------------------------------------
# install python dependencies:
# ------------------------------------------
COPY requirements.txt "$INSTALL_DIR/"
RUN pip install -r requirements.txt
不,我执行以下命令:
$ docker-compose exec webserver basexclient -n xmldb
$ > Username: admin
$ > Password: **** (admin)
$ > Access denied.
但是,如果我使用的是REST API,那么一切似乎都可以正常工作
$ docker-compose exec webserver bash
$ > wget --user admin --password admin xmldb:8984/res
$ > cat rest
$ > <rest:databases xmlns:rest="http://basex.org/rest" resources="0"/>
在这种情况下,REST API是连接到BaseX的唯一方法吗?
与SQL数据库(即postgres)类似,我希望basexclient
命令可以在网络上工作。我错了吗?
欢迎任何提示!