我有1个节点服务。
我想在两个不同的容器上运行同一服务的两个不同实例。
我使用以下docker命令
执行此操作docker run -p 9003:9003 --network ${NETWORK} --name database-service --restart always -m 1024M --memory-swap -1 -itd ${ORGANISATION}/${SERVICE_NAME}:${VERSION}
docker run -p 9113:9113 --network ${NETWORK} --name database-service-poc --restart always -m 1024M --memory-swap -1 -itd ${ORGANISATION}/${SERVICE_NAME}:${VERSION}
当我这样做时,我的第一个docker容器运行良好
但第二个容器不知何故需要9003但我通过9113请看下面的屏幕截图:
FYI,
在Node服务中我使用下面的代码来获取动态端口,即使用上面的docker命令传递的端口
app.listen(app.get('port'), function () {
logging.info("Application is running on port: %d in %s mode", app.get('port'), app.get('env'));
logging.info("process.env.PORT ",process.env.PORT); //In both the docker container it prints 9003
});
答案 0 :(得分:0)
检查docker swarm https://docs.docker.com/engine/swarm/。
使用swarm,您可以使用参数--replicas 2
运行服务。您的服务将创建两个容器,并将管理端口和其他访问
答案 1 :(得分:0)
看起来端口转发工作正常,你的图像中只暴露了9003端口。我不知道你正在服务的东西,但你应该同时拥有EXPOSE 9003
和如果您的服务确实在这两个端口上进行侦听,或者像这样执行端口转发,则在Dockerfile中EXPOSE 9113
:
docker run -p 9003:9003 --network ${NETWORK} --name database-service --restart always -m 1024M --memory-swap -1 -itd ${ORGANISATION}/${SERVICE_NAME}:${VERSION}
docker run -p 9113:9003 --network ${NETWORK} --name database-service-poc --restart always -m 1024M --memory-swap -1 -itd ${ORGANISATION}/${SERVICE_NAME}:${VERSION}
如果它在两个容器中的同一端口上使用相同的服务,并且您只想拥有不同的端口以进行负载平衡。