Я работаю с Neo4j в Kubernetes.
Для демонстрации я хочу заполнить Neo4j в модулях исходными данными, которые я могу сделать с помощью шифрофайла, который у меня есть в папке /bin
, используя шифровальную оболочку.
Так что в основном я запускаю контейнер и запускаю cat bin/initialData.cypher | bin/cypher-shell
.
Я проверил, что это работает, запустив его в kubectl exec -it <pod> /bin/bash
bash.
Однако, как бы я ни пытался сопоставить spec.container.command
, это не удается.
В настоящее время мое лучшее предположение
spec:
containers:
command:
- /bin/bash
- -c
- |
cd bin
ls
cat initialData.cypher | cypher-shell
который не работает. Он правильно отображает ls
, но потом выдает connection refused
, откуда я понятия не имею, откуда он взялся.
редактировать: Обновлено
Exec кажется лучшим способом справиться с этим, но обычно вы не будете использовать и команду, и аргументы. В этом случае, вероятно, просто поместите все это в команду.
Вы сделали правильную спецификацию, но с неправильным синтаксисом.
Попробуйте так
spec:
containers:
command: ["/bin/bash"]
args: ["-c","cat import/initialData.cypher | bin/cypher-shell"]
Обновлять: В вашем neo4j.conf вы должны раскомментировать строки, связанные с использованием оболочки neo4j.
# Enable a remote shell server which Neo4j Shell clients can log in to.
dbms.shell.enabled=true
# The network interface IP the shell will listen on (use 0.0.0.0 for all interfaces).
dbms.shell.host=127.0.0.1
# The port the shell will listen on, default is 1337.
dbms.shell.port=1337
Это как бы приблизило меня к рабочему решению, однако впоследствии я всегда получаю Connection refused
. Я отредактирую вопрос соответственно
@Urr4 Urr4 Я также обновил свой ответ соответствующим образом, проверьте его.
О, это сбивает с толку, так как я могу запустить модуль и выполнить команду без проблем. Просто, когда я делаю это в разделе command
, это не удается. попробую ваше решение
Я узнал, в чем была моя проблема. Я не понимал, что команды не связаны с жизненными циклами инициализации, что означает, что команда была выполнена до того, как в контейнере был запущен neo4j. По сути, использование команды было для меня неправильным подходом.
Почему конкретно не получается? Можете ли вы включить остальную часть спецификации? Вы запускаете это как init-контейнер?