关于在 Docker 中运行的 Grails 应用程序和 spring-security-ldap 2.0.1 插件的新手问题。
目前我正在运行本地 Grails 应用程序(不在 Docker 中),spring-security-ldap 2.0.1 的安装非常简单,主要是在 BuildConfig.groovy 中添加了一行:
插件{
编译“:spring-security-ldap:2.0.1”
}
实现了必要的用户信息和映射类后,第一次运行Grails应用,自动进行spring-security-ldap的安装,在下面安装了一堆东西
//src/target/work/plugins/spring-security-ldap-2.0.1/文件夹,这些是我认为的驱动 Ldap 登录支持的东西。
现在,如果我要将我的 Grails 应用程序移动到 docker 容器中,那么完成此插件安装的正确方法是什么?在哪里指定插件的分辨率和安装?
[更新20180425]
NVM,我只是用我更改的代码(在 BuildConfig.groovy 中指定 LDAP 插件)进行了尝试,重建了 Docker 镜像并执行了它,我现在可以看到身份验证登录页面。这意味着该插件已成功从外部 repo 中解析并内置到 Docker 镜像中!
现在的问题是,我无法使用测试用户登录:
org.springframework.security.authentication.InternalAuthenticationServiceException: localhost:389;嵌套异常是 javax.naming.CommunicationException: localhost:389 [根异常是 java.net.ConnectException: Connection denied (Connection denied)]
它必须是为我的本地 OpenLdap 打开 Docker 输入/输出端口。我将为此阅读一些 Docker 文档。
最佳答案
首先,创建一个war
文件使用 grails war
.它将自动在war文件中添加所有依赖项,包括spring-security-ldap
.您不必担心有关依赖注入(inject)的任何事情。
之后,您可以按照以下步骤创建和运行 docker 镜像:
A) 创建 Dockerfile
创建一个名为 Dockerfile
的文件在您的项目目录中包含以下内容:
FROM tomcat:7.0.86-jre7
WORKDIR /usr/local/tomcat/bin
COPY <path/to/your-war-file> /usr/local/tomcat/webapp/<application-name>.war
CMD ["catalina.sh", "run"]
B) 创建图像
只需执行
docker build -t <image name>:<image version> .
这将在您的本地 docker 引擎中创建一个 docker 镜像。C) 运行容器
最后,通过执行
docker run -p <port you wanna bind>:8080 <image name>:<image version>
启动您的应用程序如果一切顺利,您现在可以在
docker run ..
中绑定(bind)的端口上访问您的应用程序。命令。更新
要回答您更新的问题,请访问
localhost
在容器内,它不会解析为 docker 主机的本地主机。它解析为容器本身。因此,如果您在主机上运行某些东西(在本例中为端口 389 上的 OpenLDAP),则必须使用主机的 IP 来访问它。在这种情况下,更好的解决方案是运行 OpenLDAP in docker容器也。这样,您可以使用其主机名访问 OpenLDAP,并且如果 IP 发生更改,您无需更改 IP。
关于docker - docker中的Grails应用程序,安装spring-security插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49996399/