簡體   English   中英

docker 應用程序未與 docker mysql 容器通信

[英]docker application not communicate with docker mysql container

我剛遇到一個問題。 我正在使用 MySQL 作為數據庫對 springboot 應用程序進行 docker 化,它在本地設置中完美運行。 但是,當我嘗試使用 docker-compose 對應用程序進行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 工作正常,但我在服務中的應用程序無法與其通信。

這是我看到的:

在此處輸入圖像描述

任何幫助,將不勝感激!

我在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

在我對 Docker 和容器相互通信的短暫體驗中,我發現localhost配置 URL 不起作用。 因為一個容器無法僅使用localhost:[PORT]與另一個容器通信。

我解決這個問題的一個懶惰的方法是計算出運行容器的機器的 static IP 地址。 然后使用這個(本地)IP 地址而不是 localhost 來定義數據庫的端點。

在我使用 Redis 的情況下,我是這樣做的:

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...*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM