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

Grails apps in docker, installation of spring-security plugins?

关于 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 图像,并执行了它,现在我可以看到授权登录页面。这意味着该插件已从外部仓库成功解析并内置到 Docker 图像中!

现在的问题是,我无法使用测试用户登录: org.springframework.security.authentication.InternalAuthenticationServiceException: localhost:389;嵌套异常是 javax.naming.CommunicationException: localhost:389 [根异常是 java.net.ConnectException: Connection refused (Connection refused)]

它必须是关于为我的本地 OpenLdap 打开 Docker in/out 端口。为此,我将阅读一些 Docker 文档。

首先,使用 grails war 创建一个 war 文件。它会自动添加 war 文件中的所有依赖项,包括 spring-security-ldap。您不必担心有关依赖注入的任何事情。

在ward 之后,您可以按照以下步骤创建和运行 一个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 .. 命令中绑定的端口上访问您的应用程序。

更新

为了回答您更新后的问题,当您在容器内访问 localhost 时,它不会解析为 docker 主机的本地主机。它解析为容器本身。因此,如果您在主机上有一些东西 运行ning(在这种情况下,OpenLDAP 在端口 389 上),您将必须使用主机的 IP 来访问它。

在这种情况下,更好的解决方案是 运行 OpenLDAP in docker 容器。这样,您就可以使用其主机名访问 OpenLDAP,而且如果 IP 发生变化,您也不必更改它。