我们有一个运行MongoDB的Java应用程序,每个应用程序都在不同的Bluemix容器中运行。两者都是 SINGLE Bluemix容器。
我们希望使用我们的子域之一来提供Java应用程序:https://subdomain.mydomain.com
,它已经指向Bluemix。我们怎么做呢?
我们的方法
因为Java容器需要链接到Mongo容器,所以我们以编程方式创建了两个容器(我们在UI中找不到将链接容器链接到另一个容器的方式),就像这样:
sudo bluemix ic run --name mongo-container -p 27017 -m 128 registry.eu-gb.bluemix.net/mycompany/mongo
sudo bluemix ic run --name java-container --link mongo-container:mongo -p 8080 -m 128 registry.eu-gb.bluemix.net/mycompany/java
这很好用,但Java应用程序只能通过丑陋的Blumix IP访问,而不能通过我们想要的https://subdomain.mydomain.com
访问。
如何在UI中使用Bluemix容器 GROUP ( SCALABLE 容器)?
同样,我们不知道如何从UI链接容器,所以它应该像
sudo bluemix ic group-create --auto --name java-scalable -p 8080 -m 128 --hostname subdomain --domain mydomain.com registry.eu-gb.bluemix.net/mycompany/java
但是 according to the documentation我们无法将容器组链接到容器,因为没有--link
参数。
回到原来的问题。我们如何使用https://subdomain.mydomain.com
来提供Java应用程序?
答案 0 :(得分:2)
因此,遵循第二种方法,您可以在创建Bluemix容器组之前创建MongoDB服务。在创建Bluemix Container Group期间,您可以在UI中的高级选项部分下绑定现有服务:
如果您之前创建了一个自定义域,您也可以选择在创建容器期间使用自定义域:
在这种情况下,您将拥有一个包含自定义域的容器,该容器还包含现有服务。
您可以在Container Integration Documentation中找到有关绑定现有服务的更多信息。您可以在Updating Apps Documentation中了解有关在Bluemix中创建自定义域的详细信息。
答案 1 :(得分:2)
link
选项基本上在一个容器中创建环境变量以到达另一个容器。
您可以在Bluemix中对可扩展容器执行相同的操作。
以下是我所做的步骤:
1)创建MongoDB容器:
bx ic run --name ads-mongo -p 27017 -m 128 registry.ng.bluemix.net/namespace/mongo
2)检查MongoDB容器以查找专用IP地址:
bx ic inspect ads-mongo
私有IP将在输出结束时,为了简洁起见,我只是在下面添加部分输出:
"Ports": {
"27017/tcp": [
{
"HostIp": "172.31.0.235",
"HostPort": "27017"
}
]
},
"PublicIpAddress": ""
3)运行可伸缩容器,并在MongoDB凭据中包含一个或多个环境变量。确保更改Java代码以从传递给可伸缩容器的环境变量中获取凭据:
bx ic group-create --name ads-node -e "MONGO_URI=mongodb://172.31.0.235:27017" -p 3000 -m 128 --hostname ads-node --domain mybluemix.net registry.ng.bluemix.net/namespace/ads-nodebx
在我的测试中,我使用了Node.js应用程序,它读取了MongoDB凭据的MONGO_URI
环境变量。
如果需要,您也可以为MongoDB容器分配公共IP,最终结果应该类似。我看到的唯一区别是,您可以使用mongo
命令行或其他工具访问您的数据库以连接到数据库。