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

docker中的Grails应用程序,spring安全插件的安装?,docker,grails,spring-security,grails-plugin,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安全ldap:2.0.1 } 在实现了必要的用户详细信息和映射类之后,第一次运行Grails应用程序时,会自动执行spring security ldap的安装,并在 //

关于Docker中运行的Grails应用程序和spring security ldap 2.0.1插件的新手问题

目前我运行的是本地Grails应用程序,而不是Docker,spring security ldap 2.0.1的安装非常简单,主要是在BuildConfig.groovy中添加了一行: 插件{ 编译:spring安全ldap:2.0.1 }

在实现了必要的用户详细信息和映射类之后,第一次运行Grails应用程序时,会自动执行spring security ldap的安装,并在 //src/target/work/plugins/spring-security-ldap-2.0.1/folder,我认为这些就是推动ldap登录支持的因素

现在,如果我要将Grails应用程序移动到docker容器中,那么完成插件安装的正确方法是什么?在哪里指定插件的分辨率和安装

[更新20180425]

NVM,我只是用修改过的代码在BuildConfig.groovy中指定LDAP插件进行了尝试,重建了Docker映像并执行了它,现在我可以看到auth登录页面了。这意味着该插件已成功地从外部回购解析并内置到Docker映像中

现在的问题是,我无法与测试用户一起登录: org.springframework.security.authentication.InternalAuthenticationServiceException:localhost:389;嵌套异常为javax.naming.CommunicationException:localhost:389[根异常为java.net.ConnectException:连接被拒绝]

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

首先,使用grails war创建一个war文件。它将自动在war文件中添加所有依赖项,包括SpringSecurityLDAP。您不必担心任何关于依赖注入的问题

之后,您可以按照以下步骤创建并运行docker映像:

正在创建的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构建-t:。这将在本地docker引擎中创建docker映像

C运行容器 最后,通过执行docker run-p:8080:

如果一切正常,您现在可以在docker run中绑定的端口上访问应用程序。。指挥部

使现代化 为了回答您更新的问题,当您在容器中访问localhost时,它不会解析为docker主机的localhost。它解析为容器本身。因此,在本例中,如果您在主机OpenLDAP端口389上运行了一些东西,那么您必须使用主机的IP来访问它


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

A@alchn您使用的是什么Grails版本?为什么这是一个问题?您是否确实有问题,然后请说明?是否要将开发或运行应用程序固定化?插件在构建时解析并安装。因此,如果您的构建是本地的,但您在容器中运行构建的应用程序,则无需额外操作。如果您在容器中构建,那么容器需要访问internet,以便构建可以找到构建所需的存储库,包括您的插件。唯一真正的变化可能是如何向应用程序传递配置和机密,因为您可能不希望这些信息驻留在Docker映像中。环境变量是实现此目的的一种方法。@SaqibAhmed我正在使用Grails 2.4.4。@cfrick是的,我想在Grails应用程序和ldap插件中对我的应用程序进行dockerize。假设是Grails 3.x应用程序…-问题提到BuildConfig.groovy和…src/target/work/plugins/。。。。这不是Grails3应用程序。更新了Grails2.4.4的答案。谢谢你们的通知,谢谢你们的帮助。实际上,war的构建需要在Docker构建中进行,而不是首先在我的本地上复制到Docker中,这是为了遵循QA/Prod环境中的构建流程。但是无论如何,请参考我在Q中更新的部分,我已经让这部分工作了,LDAP插件已经从容器中的Grails应用程序运行了。现在剩下的唯一问题是,它无法在端口389上谈论/查询我的OpenLDAP,因此我需要为我的OpenLDAP服务提供另一个in/out端口绑定。我需要阅读Docker文档…我更新了你问题的答案更新。如果您需要更多细节和/或示例,请告诉我@alchn@SaqibAhmed在这种情况下,更好的解决方案是在docker容器中运行OpenLDAP。