Войти с пользователем cassandra при запуске контейнера - PullRequest
0 голосов
/ 19 июня 2019

У меня запущен контейнер cassandra, в который я перезаписываю файл cassandra.yaml обновленным свойством:

authenticator: PasswordAuthenticator

вместо

authenticator: AllowAllAuthenticator

Это позволит мне создать нового суперпользователя на новом экземпляре.

Теперь, после этого экземпляра, я создаю новый образ с именем cassandra-new, который имеет новый файл cassandra.yaml. Поэтому, когда я начну, это позволит мне создать новую роль для May Cassandra DB.

Проблема в том, что я должен вручную войти в экземпляр:

docker exec -it cassandra-new /bin/bash

Затем я должен вручную ввести:

cqlsh -u cassandra -p cassandra

И тогда я могу написать свой сценарий:

CREATE ROLE IF NOT EXISTS some WITH SUPERUSER = true AND LOGIN = true AND PASSWORD = 'supersome';
LIST ROLES;

Как я могу сделать это автоматически без ENTRYPOINT? (Потому что я уже пробовал это в течение 2 дней, и я устал от этого - не работает) (Пожалуйста, укажите код вместо слов, потому что я новичок.)

Dockerfile создается сценарием оболочки:

if [[ ! -e Dockerfile ]]; then
    touch Dockerfile
    cat >> Dockerfile << EOF
    FROM cassandra:latest
    COPY cassandra.yaml cassandra:etc/cassandra/cassandra.yaml
EOF
fi

docker-entrypoint.sh не был изменен, поэтому он такой же, как и файл по умолчанию, предоставленный последним образом Кассандры.

1 Ответ

1 голос
/ 20 июня 2019

Если разработчики образа док-станции cassandra не поддерживают специальные переменные среды или некоторые сценарии инициализации, которые автоматически запускаются как часть их точки входа (например, в mysql есть папка, в которую вы монтируете файлы .sql, .sh или .gz, и он выполняет их соответственно), то вам требуется пользовательская точка входа или просто нужно сделать это вручную ...

Один из способов сделать это - простой скрипт, который запускает контейнер cassandra и выполняет эти команды, но в зависимости от вашей средыэто может быть либо командный, либо командный сценарий, так что это совершенно нестандартное решение.

Поскольку точка входа в cassandra, вероятно, запускает службу, а процесс init - единственный способ фактически управлять этим, - это пользовательская точка входа..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...