Мне хочется использовать BaseX в проекте, который использует Docker (в данном случае docker-compose
).Обычная настройка для веб-приложения использует один контейнер для базы данных, а другой - для веб-сервера.Это означает, что веб-сервер должен подключаться к BaseX по сети.Однако, если я пытаюсь подключиться к контейнеру базы данных по сети с помощью команды basexclient
, я всегда получаю ошибку denied .С другой стороны, 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
будет работать по сети.Я не прав?
Любые подсказки приветствуются!