两个Docker容器之间的通信
问题描述:
我使用两个容器的Docker。其中之一是用Python编写一个简单的服务器:两个Docker容器之间的通信
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Flask Dockerized'
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0')
第二个是简单的客户端:即
r = requests.get('http://localhost:5000')
我怎样才能让他们彼此认识,如果他们都在不同的容器中运行?
答
如果您使用类似Cycle的平台,则可以使用主机名通过加密的专用网络连接容器。
声明:我是Cycle的开发人员。
P.S.这里有一个链接,你可以用它来试试: https://portal.cycle.io/signup?code=JO4J8BM
有几种方法。我通常使用的方式(我认为现在已经过时了)是EXPOSE服务器容器中的端口,然后使用“--link”将客户端容器链接到它。这将在客户端的'/ etc/hosts'文件中添加一个条目,允许您在客户端应用程序中引用服务器(使用类似于'requests.get('flask:5000')''的方式为链接的正在运行的容器'flask'暴露端口5000)。 – Tagc
更好的替代方案是使用Docker组合来定义服务器和客户端图像。这将允许您在自己的独立网络中同时启动这两个应用程序,并使用与容器名称相同的主机名从客户端应用程序自动发现服务器。 https://docs.docker.com/compose/networking/ – Tagc
用'--name'命名第二个容器。用'--link '运行你的第一个容器。您将能够简单地使用来自第一个容器的'r = requests.get('')'来请求。 –