我们有一个使用 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
。
如何使用 Bluemix 容器 GROUP(UI 中的 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 应用程序提供服务?
最佳答案
link
选项基本上是在一个容器中创建环境变量以到达另一个容器。
您可以对 Bluemix 中的可扩展容器执行相同的操作。
这是我做的步骤:
1) 创建您的 MongoDB 容器:
bx ic run --name ads-mongo -p 27017 -m 128 registry.ng.bluemix.net/namespace/mongo
2) 检查 MongoDB 容器以找到私有(private) IP 地址:
bx ic inspect ads-mongo
私有(private) 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 容器分配公共(public) IP,最终结果应该相似。我看到的唯一区别是您可以使用 mongo
命令行或其他工具连接到数据库来访问您的数据库。
关于java - Bluemix 创建链接到另一个容器的容器组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44087532/