java – Bluemix创建链接到另一个容器的容器组

我们有一个运行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应用程序提供服务?

解决方法:

链接选项基本上在一个容器中创建环境变量以到达另一个容器.

您可以对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命令行或其他工具访问您的数据库以连接到数据库.

上一篇:linux – 为什么我的udev规则不能在正在运行的docker容器中运行?


下一篇:linux – 为什么systemd-nspawn不适合生产部署?