我在nodejs上运行了3个nodejs微服务。其中一个在单独的子域中运行,另外两个在路径上路由。我的Docker文件如下所示
FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
EXPOSE 9000
CMD [ "npm", "start" ]
每个图像的端口都不同。在此之后我有一个nginx在裸机服务器上运行,具有反向代理的所有配置。我知道这不是最好的方式。如何在同一个端口上运行和监听3个单独的实例?
同样对于数据库链接我正在使用--link
标志,但在文档中显示为折旧,有什么方法可以解决这个问题?
答案 0 :(得分:1)
使用Traefik代替NGiNX:它将根据通过领事发现的容器调整其反向代理规则。
请参阅“Traefik Swarm cluster”以设置群集。
然后,您可以使用service constrains声明数据库,以便所述基地始终在同一节点上运行。
请参阅“Running a MongoDB Replica Set on Docker 1.12 Swarm Mode: Step by Step”:
基本计划是将副本集的每个成员定义为单独的服务,并使用约束来防止swarm orchestration将它们从数据卷中移开
例如:
docker@manager1:~$ docker node update --label-add mongo.replica=1 $(docker node ls -q -f name=manager1)
docker service create --replicas 1 --network mongo \
--mount type=volume,source=mongodata1,target=/data/db \
--mount type=volume,source=mongoconfig1,target=/data/configdb \
--constraint 'node.labels.mongo.replica == 1' \
--name mongo1 mongo:3.2 mongod --replSet example