在 docker 容器中为 karaf 使用主机文件时出现问题
Issue when using host file in docker container for karaf
我的问题是 jasypt 完成的 karaf users.properties 文件的“自动加密”。我正在使用 docker 快速部署 3 个 karaf 环境。
我正在使用 karaf-maven-plugin 构建一个简单的 karaf 原型,其中包含我需要的基本功能,然后我构建一个 docker 图像并 运行 它在 Docker,外部化一些特定于环境的文件夹。
这是我的 Docker 文件的摘录:
VOLUME ["/opt/karaf/deploy"]
VOLUME ["/opt/karaf/data"]
VOLUME ["/opt/karaf/etc/config-files"]
RUN rm /opt/karaf/etc/users.properties
RUN ln -s /opt/karaf/etc/config-files/users.properties /opt/karaf/etc/users.properties \
&& ln -s /opt/karaf/etc/config-files/log4j2.xml /opt/karaf/etc/log4j2.xml
而且,这是我正在使用的 运行 命令:
docker run -it --rm -p 8181:8181 \
-v d:/amc_karaf/config-files:/opt/karaf/etc/config-files \
-v d:/amc_karaf/deploy:/opt/karaf/deploy \
-v d:/amc_karaf/data:/opt/karaf/data \
--name karaf-container karaf:test
如您所见,实际的 users.properties 文件存储在我的主机上而不是我的容器上,并且它有效(使用存储在主机上的密码进行身份验证有效)。
现在,情况是这样的:
- 当我没有外部化 users.properties(符号 link + 卷)时,一旦我修改并保存密码,密码就会被正确加密。
- 当我使用文件的外部化时,加密只在我启动 karaf 时执行,而不是在我保存文件时立即执行。
我怀疑这个问题可能与 Felix 有关,根据我的理解,它会监视文件的变化,并使用 docker 卷进行外部化。但是,我无法找到解决该特定问题的方法。
对于如何解决这个问题,您有什么想法或建议吗?
(部署文件夹也有同样的问题。当我在部署文件夹中添加新包时,我需要重新启动 karaf,否则它们不会像我通常期望的那样自动启动。但我确实这样做了当我在文件夹上使用 ls
时看到它们。)
存在与 docker 容器共享文件夹相关的已知(可能难以解决)问题。
我不知道细节,但如果在主机中进行了上述更改,容器内的应用程序 运行 通常很难跟踪文件更改或文件添加。
在 docker 中修改 Karaf 运行 的配置文件时,我经常不得不求助于 docker exec -it karaf /bin/bash
并在之前使用一些 touch
或 cp
命令技巧karaf 检测新配置。当我安装将配置从我的本地 Maven 存储库添加到 karaf 运行.
的功能时也是这种情况
诡计:
- 对修改后的文件使用 touch 命令(并不总是有效)。
- 当触摸失败时,我通常必须将配置文件复制到新文件,删除原来的文件并将副本重命名为原来的名称。
这些并不是 docker 和瘟疫荚人独有的。
解决这些问题的一种方法是使用 karaf shell 添加用户
jaas:realm-list
# Check the index of properties module (usually 1)
jaas:manage-realm --index <index>
jaas:user-add <username> <password>
jaas:group-add <username> <group>
jaas:update
# example create new user example-user and add it to admingroup
jaas:manage-realm --index 1
jaas:user-add example-user password
jaas:group-add example-user admingroup
jaas:update
其他替代方法是使用 some other logging module,它可以让您使用诸如活动目录或数据库之类的东西来对用户进行身份验证。
我的问题是 jasypt 完成的 karaf users.properties 文件的“自动加密”。我正在使用 docker 快速部署 3 个 karaf 环境。
我正在使用 karaf-maven-plugin 构建一个简单的 karaf 原型,其中包含我需要的基本功能,然后我构建一个 docker 图像并 运行 它在 Docker,外部化一些特定于环境的文件夹。
这是我的 Docker 文件的摘录:
VOLUME ["/opt/karaf/deploy"]
VOLUME ["/opt/karaf/data"]
VOLUME ["/opt/karaf/etc/config-files"]
RUN rm /opt/karaf/etc/users.properties
RUN ln -s /opt/karaf/etc/config-files/users.properties /opt/karaf/etc/users.properties \
&& ln -s /opt/karaf/etc/config-files/log4j2.xml /opt/karaf/etc/log4j2.xml
而且,这是我正在使用的 运行 命令:
docker run -it --rm -p 8181:8181 \
-v d:/amc_karaf/config-files:/opt/karaf/etc/config-files \
-v d:/amc_karaf/deploy:/opt/karaf/deploy \
-v d:/amc_karaf/data:/opt/karaf/data \
--name karaf-container karaf:test
如您所见,实际的 users.properties 文件存储在我的主机上而不是我的容器上,并且它有效(使用存储在主机上的密码进行身份验证有效)。
现在,情况是这样的:
- 当我没有外部化 users.properties(符号 link + 卷)时,一旦我修改并保存密码,密码就会被正确加密。
- 当我使用文件的外部化时,加密只在我启动 karaf 时执行,而不是在我保存文件时立即执行。
我怀疑这个问题可能与 Felix 有关,根据我的理解,它会监视文件的变化,并使用 docker 卷进行外部化。但是,我无法找到解决该特定问题的方法。
对于如何解决这个问题,您有什么想法或建议吗?
(部署文件夹也有同样的问题。当我在部署文件夹中添加新包时,我需要重新启动 karaf,否则它们不会像我通常期望的那样自动启动。但我确实这样做了当我在文件夹上使用 ls
时看到它们。)
存在与 docker 容器共享文件夹相关的已知(可能难以解决)问题。
我不知道细节,但如果在主机中进行了上述更改,容器内的应用程序 运行 通常很难跟踪文件更改或文件添加。
在 docker 中修改 Karaf 运行 的配置文件时,我经常不得不求助于 docker exec -it karaf /bin/bash
并在之前使用一些 touch
或 cp
命令技巧karaf 检测新配置。当我安装将配置从我的本地 Maven 存储库添加到 karaf 运行.
诡计:
- 对修改后的文件使用 touch 命令(并不总是有效)。
- 当触摸失败时,我通常必须将配置文件复制到新文件,删除原来的文件并将副本重命名为原来的名称。
这些并不是 docker 和瘟疫荚人独有的。
解决这些问题的一种方法是使用 karaf shell 添加用户
jaas:realm-list
# Check the index of properties module (usually 1)
jaas:manage-realm --index <index>
jaas:user-add <username> <password>
jaas:group-add <username> <group>
jaas:update
# example create new user example-user and add it to admingroup
jaas:manage-realm --index 1
jaas:user-add example-user password
jaas:group-add example-user admingroup
jaas:update
其他替代方法是使用 some other logging module,它可以让您使用诸如活动目录或数据库之类的东西来对用户进行身份验证。