如何拥有相同服务的不同docker容器?

时间:2018-05-04 11:17:42

标签: node.js docker docker-compose dockerfile docker-machine

我有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请看下面的屏幕截图:

enter image description here

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
});

2 个答案:

答案 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}

如果它在两个容器中的同一端口上使用相同的服务,并且您只想拥有不同的端口以进行负载平衡。