簡體   English   中英

通過Docker容器拒絕訪問本地數據庫

[英]Access to local database denied through docker container

我將編譯后的Spring-Boot應用程序連接到服務器上另一個容器上運行的數據庫時遇到問題。

我嘗試了不同的配置,將連接從localhost更改為服務器的IP地址。 我還仔細檢查了通過Adminer登錄的憑據是否匹配。 最后,我多次重建了compose和image文件,以確保我具有所有最新版本。

撰寫文件:

version: '3.1'
services:
 db:
  image: mariadb
  restart: always
  environment:
   MYSQL_ROOT_PASSWORD: mypassword
   MYSQL_DATABASE: marketingappdb
  ports:
   - "3306:3306"
  expose:
   - 3306
  volumes:
   - ./mariadbvolume:/var/lib/mariadb
  networks:
   - marketingapp
 adminer:
  image: adminer
  restart: always
  ports:
   - "8086:8080"
  expose:
   - 8086
  depends_on:
   - db
  networks:
   - marketingapp
 springserver:
  image: marketingapp
  restart: always
  ports:
   - "8091:8091"
  expose:
   - 8091
  depends_on:
   - db
  networks:
   - marketingapp
networks:
  marketingapp:

Spring服務器映像:

FROM openjdk:latest
COPY /marketing-app-final.jar .
EXPOSE 8091
ENTRYPOINT ["java", "-jar", "marketing-app-final.jar"]

Spring的應用程序屬性:

server.port = 8091
spring.datasource.url=jdbc:mariadb://0.0.0.0:3306/marketingappdb
spring.datasource.username=root
spring.datasource.password=mypassword
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

我可以使用應用程序從遠程相同的配置(顯然是用IP替換localhost)將PC連接到數據庫,卻看不到為什么我不能在實際的服務器上執行相同的操作。 在此先感謝您的幫助!

使用docker dns將spring應用連接到mariabd:

jdbc:mariadb://db:3306/marketingappdb

其他一些提示:您不需要公開端口3306,您已經將其綁定到主機上的3306(如果您只想從Docker Services中使用它,則根本不需要綁定/公開它) 。 而mariabd永久存儲是var / lib / mysql,而不是var / lib / mariadb

暫無
暫無

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

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