ロジャ*_*ジャー 9 docker docker-compose
我正在构建两个共享一些通用数据的项目。这两个项目的服务是由两个 docker-compose YML 文件构建的。我想从一个堆栈中运行的Python脚本访问另一个堆栈中指定的MySQL服务器。
我是通过连接到内部 docker IP 来实现的。但是我发现服务器重启后IP就变了。我尝试通过容器名称进行连接,或在 docker-compose YML 文件中“链接”容器名称。两者都不起作用。我认为在两个堆栈之间共享一个 docker 网络接口应该可以解决问题。
我可以知道如何在两个 docker-compose YML 文件中指定“网络”吗?
或者,有没有更好的方法来实现这一目标?
谢谢。
在您的撰写文件之外创建一个网络(这可以避免依赖于部署的撰写文件的顺序):
$ docker network create dbnet
Run Code Online (Sandbox Code Playgroud)
然后将要相互连接的服务放置在这个外部网络上。例如 mysql 的 compose 文件可以是:
version: '3.5'
networks:
dbnet:
external: true
name: dbnet
services:
mysql:
networks:
- dbnet
Run Code Online (Sandbox Code Playgroud)
您的其他撰写文件将连接到同一网络:
version: '3.5'
networks:
dbnet:
external: true
name: dbnet
services:
pythonapp:
networks:
- dbnet
Run Code Online (Sandbox Code Playgroud)
从 pythonapp 中,您可以使用“mysql”(服务名称)而不是 IP 连接到数据库。只要容器位于同一网络上,Docker 就会为您处理 DNS 解析。
注意我使用 3.5+ 语法来定义外部网络。在此之前,语法是:
networks:
dbnet:
external:
name: dbnet
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅:https://docs.docker.com/compose/compose-file/#external-1
归档时间: |
|
查看次数: |
5849 次 |
最近记录: |