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

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

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

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

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

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

谢谢。

答案1

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

$ docker network create dbnet

然后将您想要互相连接的服务放在这个外部网络上。例如,mysql 的 compose 文件可以是:

version: '3.5'

networks:
  dbnet:
    external: true
    name: dbnet

services:
  mysql:
    networks:
    - dbnet

并且您的其他撰写文件将连接到同一网络:

version: '3.5'

networks:
  dbnet:
    external: true
    name: dbnet

services:
  pythonapp:
    networks:
    - dbnet

从 pythonapp,你可以以“mysql”(服务名称)而不是 IP 的形式连接到数据库。只要容器位于同一网络上,Docker 就会为你处理 DNS 解析。

注意我使用了 3.5+ 语法来定义外部网络。在此之前,语法是:

networks:
  dbnet:
    external:
       name: dbnet

有关详细信息,请参阅:https://docs.docker.com/compose/compose-file/#external-1

相关内容