Восстановление базы данных neo4j в контейнере Docker из файла .backup

У меня есть 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 не может запускать команды, сценарий мог это сделать. Но не повезло.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
0
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку сервер 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

Да. Проблема решается установкой первоначального пароля. Большое спасибо за помощь.

Tahir Rasheed 26.05.2024 09:58

Помните, что любые переменные ENV и команды RUN видны в docker history любому, у кого есть копия изображения – восстановить этот пароль практически тривиально.

David Maze 26.05.2024 11:55

Другие вопросы по теме