【发布时间】:2021-03-13 02:43:09
【问题描述】:
我在 docker swarm 中使用图像 app1 和 app2 创建了 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