我使用docker-组合来描述我的一个应用程序的部署。应用程序由一个
如果我缩放nodejs应用程序,我希望nginx自动缩放到这三个应用程序。
最近,我使用了以下代码片段:
https://gist.github.com/cmoore4/4659db35ec9432a70bca
这是基于以下事实:在链接上创建了一些环境变量,并在出现新服务器时进行更改。
但是现在,随着docker文件的版本2和新链接系统的码头,环境变量已经不存在了。
我的nginx现在如何检测我的应用程序的扩展?
version: '2'
services:
nodejs:
build:
context: ./
dockerfile: Dockerfile.nodejs
image: docker.shadoware.org/passprotect-server:1.0.0
expose:
- 3000
links:
- mongodb
environment:
- MONGODB_HOST=mongodb://mongodb:27017/passprotect
- NODE_ENV=production
- DEBUG=App:*
nginx:
image: docker.shadoware.org/nginx:1.2
links:
- nodejs
environment:
- APPLICATION_HOST=nodejs
- APPLICATION_PORT=3000
mongodb:
image: docker.shadoware.org/database/mongodb:3.2.7发布于 2016-07-02 12:12:00
文档声明这里:
可以在与别名相同的主机名上访问链接服务的容器,如果未指定别名,则可访问服务名称。
因此,我相信您可以在nginx conf文件中设置服务名称,如下所示:
upstream myservice {
yourservice1;
yourservice2;
}因为它们将作为每个容器的主机条目在/etc/hosts中导出。
但是,如果您真的想要将主机:端口信息作为环境变量,您可以编写一个脚本来解析这个docker-come.yml和定义.env文件,或者手动完成它。
更新:
您可以从容器外部获取该端口信息,这将返回港口。
docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' your_container_id但是,如果您想要从容器内部执行此操作,那么您需要的是像动物园管理员这样的服务发现系统。
关于这一点,有一个很长的码头回购中的特性请求线程。
一种解决办法引起了我的注意。您可以尝试在此基础上构建自己的nginx映像。
https://stackoverflow.com/questions/38159180
复制相似问题