我一直在研究在REST服务项目中使用Docker。我的一个问题是,我们是否可以使用Docker在同一主机/端口上运行该服务的多个版本。
例如,我希望一个端点位于{myserver}:8080/v1/,另一个端点位于{myserver}:8080/v2/。
如果相关的话,它们应该是在Spring Boot REST框架上使用java jar构建的基于Java:8的Docker镜像。
对于Docker容器,这是可能的吗?
发布于 2015-06-21 07:56:38
您可以使用不同的主机端口运行这两个容器,并使用haproxy/nginx/varnish (本地或在另一个容器内部)侦听主机端口,然后根据URL重定向到正确的容器。
发布于 2015-06-21 04:07:46
这是一个关于tcp端口工作方式的问题,也是关于docker工作方式的问题。同样,两个应用程序不能绑定到同一个tcp端口,两个docker容器也不能。
正如@Sergei Rodionov指出的那样,SO_REUSEPORT可用于允许多个进程共享同一个tcp端口(这可以在启动java应用程序时指定)。我不认为这可以跨容器工作。
发布于 2015-06-21 08:09:43
是的,这是可能的,只要您正在侦听的每个重复端口使用不同的网络地址。
例如,您的主机分配了以下it: 192.168.11.223 10.88.88.12
您可以有两个单独的容器同时监听: 192.168.11.223:80 10.88.88.12:80
如果你看一下docker run的语法:
-p=[] : Publish a container᾿s port or a range of ports to the host
format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
Both hostPort and containerPort can be specified as a range of ports.
When specifying ranges for both, the number of container ports in the range must match the number of host ports in the range. (e.g., `-p 1234-1236:1234-1236/tcp`)
(use 'docker port' to see the actual mapping)https://stackoverflow.com/questions/30958292
复制相似问题