两个堆栈的两个docker容器之间的连接

ロジャ*_*ジャー 9 docker docker-compose

我正在构建两个共享一些通用数据的项目。这两个项目的服务是由两个 docker-compose YML 文件构建的。我想从一个堆栈中运行的Python脚本访问另一个堆栈中指定的MySQL服务器。

我是通过连接到内部 docker IP 来实现的。但是我发现服务器重启后IP就变了。我尝试通过容器名称进行连接,或在 docker-compose YML 文件中“链接”容器名称。两者都不起作用。我认为在两个堆栈之间共享一个 docker 网络接口应该可以解决问题。

我可以知道如何在两个 docker-compose YML 文件中指定“网络”吗?

或者,有没有更好的方法来实现这一目标?

谢谢。

BMi*_*tch 8

在您的撰写文件之外创建一个网络(这可以避免依赖于部署的撰写文件的顺序):

$ 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