【问题标题】:How to call a service from another service in docker swarm如何从 docker swarm 中的另一个服务调用服务
【发布时间】:2021-03-13 02:43:09
【问题描述】:

我在 docker swarm 中使用图像 app1app2 创建了 2 个服务,其中服务 app1 调用 app2,但在 docker swarm 中,服务 app1 无法连接到 app2:5000 的服务 app2 (<service-name>:<port> )得到错误requests.exceptions.ConnectionError,相反,如果我创建普通容器(没有docker swarm),那么app1可以轻松地在app2:5000<container-name>:<port>)调用app2

在 docker swarm 内部使用以下命令创建服务

$ sudo docker service create --name app1 -p 5001:5000 app1:latest
$ sudo docker service create --name app2 -p 5002:5000 app2:latest 

在 docker swarm 外部使用以下命令来运行容器

$ sudo docker-compose build
$ sudo docker-compose up

用于构建图像 app1 和 app2 的代码如下所示

app.py (App1)

from flask import Flask, request, jsonify
import requests

app = Flask(__name__)

@app.route('/')
def func1():
    return jsonify('This is App #1')

@app.route('/call')
def func2():
    res = requests.get('http://app2:5000/call')
    res = res.json()
    return jsonify(res)

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

app.py (App2)

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def func1():
    return jsonify('This is App #2')

@app.route('/call')
def func2():
    return jsonify('Call to App2 is Successful')

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

docker-compose.yml

version: '3.3'

services:
  
  app1:
    build: ./app1         
    image: "app1:latest"   
    container_name: app1
    ports:
      - "5001:5000"
    networks:
      - net1
  
  app2:
    build: ./app2
    image: "app2:latest"
    container_name: app2
    ports:
      - "5002:5000"
    networks:
      - net1

networks:
  net1:
    external: true

【问题讨论】:

    标签: docker flask docker-swarm


    【解决方案1】:

    将服务放在同一个网络中解决了这个问题

    【讨论】:

      猜你喜欢
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 2018-12-27
      • 2011-02-16
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      相关资源
      最近更新 更多