如何从 docker 群中的另一个服务调用一个服务
How to call a service from another service in docker swarm
我在 docker swarm 中使用图像 app1
和 app2
创建了 2 个服务,其中服务 app1 调用 app2 但在 docker swarm 服务 app1 可以't connect to service app2 at app2:5000
(<service-name>:<port>
) 收到错误 requests.exceptions.ConnectionError
,相反如果我创建普通容器(没有 docker swarm)然后 app1 可以轻松调用 app2在 app2:5000
(<container-name>:<port>
)
内部 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 swarm 中使用图像 app1
和 app2
创建了 2 个服务,其中服务 app1 调用 app2 但在 docker swarm 服务 app1 可以't connect to service app2 at app2:5000
(<service-name>:<port>
) 收到错误 requests.exceptions.ConnectionError
,相反如果我创建普通容器(没有 docker swarm)然后 app1 可以轻松调用 app2在 app2:5000
(<container-name>:<port>
)
内部 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
将服务放在同一个网络中解决了这个问题