У меня есть Dockerfile, который использует официальный образ Neo4j Enterprise и восстанавливает базу данных из резервной копии. Когда я восстанавливаю базу данных, она отображается в каталоге /data/databases. Имя базы данных — piqosity. Однако, когда я захожу в оболочку Cypher и выполняю команду SHOW DATABASES, она показывает только базу данных neo4j по умолчанию и системную базу данных, но не piqosity.
Я нашел решение: захожу в оболочку Cypher и выполняю команду CREATE DATABASE piqosity. Когда пикосити создается, он доступен там и содержит все мои данные пикосити. Теперь я хочу добавить шаги по созданию базы данных piqosity в Dockerfile, чтобы мне не приходилось каждый раз заходить в оболочку Cypher и выполнять команду для создания базы данных.
Вот мой Dockerfile:
# Use the official Neo4j Enterprise image as the base image
FROM neo4j:enterprise
# Set the environment variables for Neo4j
ENV NEO4J_AUTH=neo4j/Tahir@0308
# Copy the database backup file into the container
COPY neo4j-2024-05-23T00-06-33.backup /backup/
# Change the ownership and permissions of the backup directory
USER root
RUN apt-get update && apt-get install -y netcat \
&& chown -R neo4j:neo4j /backup \
&& chmod -R 755 /backup
# Run the restore command using neo4j-admin as the neo4j user
USER neo4j
RUN neo4j-admin database restore --from-path=/backup/neo4j-2024-05-23T00-06-33.backup --overwrite-destination=true piqosity
# Expose the default Neo4j ports
EXPOSE 7474 7687
# Start Neo4j and wait for it to fully start
CMD neo4j start && \
sleep 120 && \
cypher-shell -u neo4j -p Tahir@0308 'CREATE DATABASE piqosity;' && \
tail -f /dev/null
Однако, когда я добавляю эти строки:
CMD neo4j start && \
sleep 120 && \
cypher-shell -u neo4j -p Tahir@0308 'CREATE DATABASE piqosity;' && \
tail -f /dev/null
Я получаю сообщение об ошибке: Клиент не авторизован из-за сбоя аутентификации.
С учетными данными проблем нет, потому что когда я удаляю эти строки из файла Dockerfile (который создает базу данных) и создаю контейнер, я могу без проблем войти в оболочку Cypher с теми же учетными данными.
Я хочу создать базу данных в Neo4j в Dockerfile. Или, если есть какое-либо решение, я могу восстановить свою базу данных в контейнере Docker, и она будет работать нормально и будет видна, когда я запускаю команду SHOW DATABASES или когда я получаю к ней доступ по адресу localhost:7474.
Я попытался изменить файл Dockerfile, а также попытался выполнить шаги по созданию базы данных с помощью сценария оболочки, скопировал его в контейнер и запустил, чтобы, если CMD не может запускать команды, сценарий мог это сделать. Но не повезло.

Поскольку сервер Neo4j до сих пор ни разу не запускался, среда NEO4J_AUTH никогда не использовалась и, следовательно, первоначальный пароль еще не установлен.
Вам нужно будет установить его перед запуском команды оболочки шифра.
# Set the initial password
RUN neo4j-admin dbms set-initial-password Tahir@0308
# Start Neo4j and wait for it to fully start
CMD neo4j start && \
sleep 120 && \
cypher-shell -u neo4j -p Tahir@0308 'CREATE DATABASE piqosity;' && \
tail -f /dev/null
Помните, что любые переменные ENV и команды RUN видны в docker history любому, у кого есть копия изображения – восстановить этот пароль практически тривиально.
Да. Проблема решается установкой первоначального пароля. Большое спасибо за помощь.