docker - docker中的Grails应用程序,安装spring-security插件?

标签 docker grails spring-security grails-plugin

关于在 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/

相关文章:

java - Spring 用户忘记密码替代方法

java - 河豚密码验证

docker - 如何将 `docker-compose run` 置于工作目录之外

grails 枚举或字符串属性, future 的数据库更新有什么区别?

docker - 我的 Nuxt/Docker/Traefik 配置可能有什么问题?

grails - Grails:将自定义约束应用于Domain类的所有字段

grails - Grails Spock集成测试中的继承

java - Spring @Scheduler 执行了两次。我正在使用 spring security,如果我删除上下文参数 spring security 不起作用

docker - 我可以使用 CoreOS rkt 运行/转换 Docker-Compose 项目吗?

docker - 停止和删除 docker 容器的单个命令