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 发生变化,您也不必更改它。
关于 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 发生变化,您也不必更改它。