两个 Docker 容器之间的通信

4

我正在使用两个容器的Docker。其中一个是用Python编写的简单服务器:

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')

如果它们运行在不同的容器中,我该如何让它们相互通信呢?

1
有几种方法。我通常使用的方式(我认为现在已经过时了)是在服务器容器中“EXPOSE”端口,然后使用“--link”将客户端容器链接到它。这将在客户端的“/etc/hosts”文件中添加一个条目,允许您在客户端应用程序中引用服务器(例如,对于一个名为“flask”的链接运行的容器,暴露端口5000,可以使用类似“requests.get('flask:5000')”这样的东西)。 - Tagc
4
更好的选择是使用Docker Compose定义服务器和客户端镜像。这将允许您在它们各自的隔离网络中同时启动两个应用程序,而且服务器将通过与容器名称相同的主机名自动被客户端应用发现。参见https://docs.docker.com/compose/networking/。 - Tagc
2
使用 --name <second_container> 命名您的第二个容器。使用 --link <second_container> 运行您的第一个容器。您将能够从第一个容器中简单地使用 r = requests.get('<second_container>') 发出请求。 - Rafaf Tahsin
1个回答

1
如果您使用类似Cycle的平台,您可以使用主机名通过加密的私有网络连接容器。
免责声明:我是Cycle的开发人员。
附注:这是一个链接,您可以使用它来尝试一下:https://portal.cycle.io/signup?code=JO4J8BM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接