Docker swarm:可在端口3001上访问REST API,但无法通过Web服务器

时间:2017-08-30 08:23:49

标签: rest api curl docker docker-swarm

我有以下设置:

网络:入侵(Swarm) 服务:    卷筒纸    API

Web服务正在一个暴露端口3000的容器中运行,而api正在一个暴露端口3001的容器中运行。

我可以查询localhost:3000或IP地址:3000(来自任何其他计算机),并加载webapp。此外,我可以在localhost:3001或IP地址:3001(从任何其他机器)POST到api,我将得到所需的响应。

在web-app中,有一个REST端点,它允许我将数据发送到/ api端点的端口3000,后者将该POST请求重定向到api容器上的3001。

问题是,当我将数据发布到3000:/ api时,curl就会挂起。没有反应,没有任何反应,我也不知道该怎么做。

从文档中可以看出,同一网络上的所有容器都可以访问彼此的端口,无论它们是否已发布/公开。

我很困惑为什么它不起作用。另外,我甚至没有收到错误,卷曲只是根本没有返回值。

示例:

docker swarm init
docker service create --name=web --mode global --publish 3000:3000 project/web
docker service create --name=api --replicas 5 --publish 3001:3001 project/api

现在,如果我从网络上的另一台计算机运行以下命令,它可以正常工作:

curl <IP_address>:3000

从web-app返回index.html     卷曲:3001 /预测 - 数据&#39; {...}&#39; -H&#34; Content-Type:application / json&#34; 根据需要返回正确的数据

现在,web-app有一个端点:3000 / api / predict,它接收来自正文的json,然后将相同的数据发布到localhost:3001 / predict endpoint(位于另一个容器上)。 / p>

如果我ssh到容器中,curl请求会返回Connection refused错误。

我还试图替换&#34; localhost&#34;使用其中一个复制容器的名称或服务名称。

我总是卷曲:(6)无法解决主持人:海洋

0 个答案:

没有答案