我有以下设置:
网络:入侵(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)无法解决主持人:海洋