grails - 在Cloud Foundry中链接两个应用程序

标签 grails docker cloudfoundry pivotal-cloud-foundry

我的应用程序分为两个不同的应用程序(微服务?)。一个作为docker容器部署到CF,另一个作为常规WAR文件(grails应用程序)部署。 docker容器是一个Python / Flask应用程序,它公开了REST API。 WebApp使用此其余API。

以前,我将这些应用程序作为两个单独的Docker容器使用,并将使用docker --link flag执行它们,但现在我希望将这些应用程序放在Cloud Foundry中。在docker世界中,我曾经做以下事情。

docker run -d --link python_container -p 8080:8080 --name war_container war_image

上面的命令将在war_container中创建环境变量,该环境变量将公开python_container的IP地址和端口。使用这些环境变量,我可以从WAR应用程序与python_container通信。这些环境变量如下所示:
PYTHON_CONTAINER_PORT_5000_TCP_ADDR=<ipaddr>
PYTHON_CONTAINER_PORT_5000_TCP_PORT=<port>

问题

可以在Cloud Foundry中做类似的事情吗?我已经在CF中部署了docker容器。如何链接我的WAR应用程序,以使创建环境变量的方式能够在我推送war文件后立即链接到python_container

目前,我使用以下方法将Docker容器推送到PCFDev:
cf push my-app -o 192.168.0.102:5002/my/container:latest

然后我使用
cf push cf-sample -n cf-sample
cf-sample的manifest.yml为:
---
applications:
  - name: cfsample
    memory: 1G
    instances: 1  
    path: target/cf-sample-0.1.war
    buildpack: java_buildpack
    services:
      - mysql
      - rabbitmq

最佳答案

如果您有多个Python应用程序实例,因此有多个IP /端口,那么Doc​​ker方式将如何工作?

对于PCF,您只需让Java应用程序“通过前门”与Python应用程序对话:https://my-python-app.local.pcfdev.io

您还可以尝试发现Python应用程序的IP和端口(例如,请参见https://docs.run.pivotal.io/devguide/deploy-apps/environment-variable.html#CF-INSTANCE-IP),然后将这些值作为环境变量传递给Java应用程序,但这是一个非常脆弱的解决方案。

如果您对直接容器到容器联网感兴趣,则可能对阅读this proposal并提供反馈感兴趣。

关于grails - 在Cloud Foundry中链接两个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39975566/

相关文章:

select - Grails 3.2.2 从域约束中选择选项

docker - 是否可以在具有不同子域和相同监听端口的单个主机上部署多个容器(80)?

docker - 在每次部署中,构建一个包含应用程序的新 docker 镜像而不是仅仅更新应用程序有什么好处?

docker - 执行python脚本后Docker容器崩溃

grails - CloudFoundry之后Grails项目无法运行

grails - cloudfoundry是否支持grails针对Java 1.7编译的应用程序?

mongodb - 用grails启动mongodb吗?

hibernate - Grails CriteriaBuilder 添加限制

Grails 集成测试在测试应用程序中不起作用,但单独启动时运行正常

docker - 使用 docker-compose 构建两个不同标记的 docker 镜像