Docker 在容器启动时使用cassandra用户登录
我启动了一个cassandra容器,在该容器上用更新的属性覆盖cassandra.yaml文件:Docker 在容器启动时使用cassandra用户登录,docker,cassandra,Docker,Cassandra,我启动了一个cassandra容器,在该容器上用更新的属性覆盖cassandra.yaml文件: authenticator: PasswordAuthenticator 反而 authenticator: AllowAllAuthenticator 这将允许我在新实例上创建新的超级用户 现在,在这个实例之后,我创建了一个名为cassandra new的新图像,其中包含新的cassandra.yaml文件。因此,当我启动它时,它将允许我为may cassandra db创建一个新角色 问题是
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由shell脚本创建:
if [[ ! -e Dockerfile ]]; then
touch Dockerfile
cat >> Dockerfile << EOF
FROM cassandra:latest
COPY cassandra.yaml cassandra:etc/cassandra/cassandra.yaml
EOF
fi
if[!-e Dockerfile];然后
触摸Dockerfile
cat>>Dockerfile除非cassandra docker图像开发人员支持特殊的环境变量或某些作为其入口点一部分自动运行的初始化脚本(例如,mysql有一个文件夹,您可以在其中装载.sql、.sh或.gz文件,它将相应地执行这些文件),然后您需要一个自定义入口点,或者只需手动执行此操作
一种方法是使用一个简单的脚本启动cassandra容器并运行这些命令,但这取决于您的环境,可以是shell脚本,也可以是批处理脚本,因此这是一个非常定制的解决方案
由于cassandra入口点可能是启动服务和执行初始化过程的对象,因此实际管理该入口点的唯一方法是自定义入口点。除非cassandra docker图像开发人员支持特殊的环境变量或某些作为入口点一部分自动运行的初始化脚本(例如,mysql有一个文件夹,您可以在其中挂载.sql、.sh或.gz文件,它将相应地执行这些文件),然后您确实需要一个自定义入口点,或者只需手动执行即可
一种方法是使用一个简单的脚本启动cassandra容器并运行这些命令,但这取决于您的环境,可以是shell脚本,也可以是批处理脚本,因此这是一个非常定制的解决方案
由于cassandra入口点可能是启动服务和执行初始化过程的对象,因此实际管理该入口点的唯一方法是自定义入口点。看看如何创建cassandra docker映像,该映像可以在启动时执行任何bash或cql脚本
根据这一要点,您可以简单地在容器内添加一个cql脚本,例如具有以下内容的/docker entrypoint initdb.d/create_roles.cql
:
CREATE ROLE IF NOT EXISTS some WITH SUPERUSER = true AND LOGIN = true AND PASSWORD = 'supersome';
LIST ROLES;
它将在启动时自动执行。看看如何创建cassandra docker映像,该映像可以在启动时执行任何bash或cql脚本
根据这一要点,您可以简单地在容器内添加一个cql脚本,例如具有以下内容的/docker entrypoint initdb.d/create_roles.cql
:
CREATE ROLE IF NOT EXISTS some WITH SUPERUSER = true AND LOGIN = true AND PASSWORD = 'supersome';
LIST ROLES;
启动时将自动执行。能否提供当前的dockerfile
和dockerentrypoint
如果有。能否提供当前的dockerfile
和dockerentrypoint
如果有。