【问题标题】:How to connect localhost:3306 of mysql container via app container- docker如何通过app container-docker连接mysql容器的localhost:3306
【发布时间】:2018-07-25 07:39:16
【问题描述】:

在我的应用程序设置中,我使用以下设置连接到数据库

spring.jpa.hibernate.ddl-auto=none
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/gosallowMultiQueries=true&createDatabaseIfNotExist=true
spring.datasource.username=root
spring.datasource.password=root

现在我有两个容器 App 和 mysql。我已经链接了两个容器

docker run --name app --link mysql:dbalias appimage

但我收到通信链接故障错误。我无法连接到 mysql 服务器

我使用下面的命令来运行 mysql 容器:

docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306 mysql:latest

有什么建议吗?

【问题讨论】:

    标签: docker containers


    【解决方案1】:

    您指向localhost,这意味着该应用正在尝试连接到它自己的容器的localhost。不是您主机的本地主机。

    如果这两个容器部署在同一个用户定义的桥接网络中,您可以使用容器名称进行通信:

    spring.datasource.url=jdbc:mysql://mysql:3306/gosallowMultiQueries=true&createDatabaseIfNotExist=true

    如果不是,您可以使用 mysql 容器的容器 IP,但这会在容器重新启动/重新创建时发生变化。推荐的方法是创建一个用户定义的桥接网络:

    $ docker network create my-network
    $ docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    73df63463bb2        bridge              bridge              local
    4cabe965c01d        host                host                local
    c94ae182d8fa        my-network          bridge              local
    93ec6f5bf028        none                null                local
    

    并在同一个网络中启动你的两个容器:

    $ docker run --name mysql --network=my-network -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306 mysql:latest
    

    当两个容器在同一个用户定义的网络中启动时,您可以使用容器名称进行通信(您可以在其中一个容器内通过docker exec 进行测试,并尝试使用容器名称 ping 另一个容器)。

    【讨论】:

    • 太棒了!您的解决方案解决了我的问题。多谢。就一个问题。是他们的任何方式,我不必在我的应用程序中将 jdbc:mysql://localhost:3306 更改为 jdbc:mysql://mysql:3306。
    • 当您关闭 docker 网络时(通过在默认主机网络 (--network=host) 上部署您的两个应用程序。然后它也可以工作,但不建议使用主机网络。这是一个优势docker 到 dockerize 网络。另一个选项是在 docker run 期间使用 --add-host 并指定如下内容:docker run --add-host 127.0.0.1:mysql。这将在您的 /etc/hosts 中添加一个主条目将 127.0.0.1 映射到 mysql 的容器(因此,当您 ping 127.0.0.1 时,您将 ping mysql 容器,但我认为他可能会导致冲突,因为它是您的本地主机)。您可以测试
    • 当然。我会尝试您建议的所有选项。再次感谢:)
    猜你喜欢
    • 2015-05-22
    • 2020-10-05
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 2022-07-21
    • 2021-11-15
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多