Spring Boot Docker应用程序无法与Docker mysql容器通信

uklbhaso  于 2022-11-23  发布在  Spring
关注(0)|答案(2)|浏览(165)

我刚刚遇到了一个问题。我正在用MySQL作为数据库对接一个springboot应用程序,它在本地设置中工作得很好。但是当我尝试使用docker-compose对接应用程序时,MySQL容器工作正常,可以在我的工作台中访问,但是我的应用程序无法访问它,引发了通信链接故障。
这是我正在使用的合成文件:

version: "3.8"

services:
  mysqldb:
    image: mysql:5.7
    restart:unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=baskartest
    ports:
      - 3307:3306
    volumes:
      - db:/var/lib/mysql
  app:
    depends_on:
      - mysqldb
    build: ./bezkoder-app
    restart:on-failure
      env_file: ./.env
      ports:
        - 8084:8080
      environment:
        SPRING_APPLICATION_JSON: '{
            "spring.datasource.url"  : "jdbc:mysql://mysqldb:3306/baskartest?useSSL=false",
            "spring.datasource.username" : "root",
            "spring.datasource.password" : "root",
            "spring.jpa.properties.hibernate.dialect" : "org.hibernate.dialect.MySQL5InnoDBDialect",
            "spring.jpa.hibernate.ddl-auto" : "update"
          }'
      volumes:
        - .m2:/root/.m2
      stdin_open: true
      tty: true

MySQL工作正常,但我的服务中的应用程序无法与它通信。
我看到的是:

任何帮助都将不胜感激!

vuktfyat

vuktfyat1#

我在docker-compose.yml文件中做了一些小的改动,请使用这个文件。它工作正常。

version: "3.8"

services:

  mysqldb:
    image: mysql:5.7
    container_name: MYSQL_DB
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=baskartest
    ports:
      - 3307:3306
  app:
    build: ./bezkoder-app
    restart: on-failure
    ports:
      - 8084:8080
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://MYSQL_DB:3306/baskartest
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=root
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update
    depends_on:
      - mysqldb
ui7jx7zq

ui7jx7zq2#

在我使用Docker和容器相互通信的短暂经验中,我发现localhost配置URL不起作用。因为一个容器不能只使用localhost:[PORT]与另一个容器通信。
解决这个问题的一个方法是计算出容器运行的机器的静态IP地址,然后使用这个(本地)IP地址而不是localhost来定义数据库的端点。

在我的情况下我是这样做的:

return new LettuceConnectionFactory(new RedisStandaloneConfiguration("192.168.1.201", 6379));

在您的情况下,您可能希望使用如下所示的数据源URL:

- SPRING_DATASOURCE_URL=jdbc:mysql://[STATIC_IP_OF_MACHINE]:3306/baskartest
  • ...192.168.1.100:3306/baskartest...*

相关问题