Команда контейнера Kubernetes

Я работаю с 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, откуда я понятия не имею, откуда он взялся.

редактировать: Обновлено

Почему конкретно не получается? Можете ли вы включить остальную часть спецификации? Вы запускаете это как init-контейнер?

Blokje5 28.05.2019 15:41
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
1
167
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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 30.05.2019 12:55

@Urr4 Urr4 Я также обновил свой ответ соответствующим образом, проверьте его.

A_Suh 04.06.2019 10:59

О, это сбивает с толку, так как я могу запустить модуль и выполнить команду без проблем. Просто, когда я делаю это в разделе command, это не удается. попробую ваше решение

Urr4 04.06.2019 15:29
Ответ принят как подходящий

Я узнал, в чем была моя проблема. Я не понимал, что команды не связаны с жизненными циклами инициализации, что означает, что команда была выполнена до того, как в контейнере был запущен neo4j. По сути, использование команды было для меня неправильным подходом.

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