【问题标题】:Access to local database denied through docker container通过 docker 容器拒绝访问本地数据库
【发布时间】:2019-12-05 16:20:26
【问题描述】:

我在将已编译的 Spring-Boot 应用程序连接到在服务器上的另一个容器上运行的数据库时遇到问题。

我尝试了不同的配置,从 localhost 更改为我的服务器的 IP 地址以进行连接。我还通过管理员登录仔细检查了凭据是否匹配。最后,我多次重新构建 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

我可以使用远程相同配置中的应用程序从我的 PC 连接到数据库(显然将 localhost 替换为 IP)并且不明白为什么我不能从实际服务器上执行相同操作。提前感谢您的帮助!

【问题讨论】:

标签: spring-boot docker docker-compose mariadb


【解决方案1】:

使用 docker dns 将你的 spring 应用程序连接到 mariabd:

jdbc:mariadb://db:3306/marketingappdb

只是一些其他提示:您不需要公开端口 3306,您已经将其绑定到主机上的 3306(如果您只想从 docker 服务中使用它,则无需绑定/公开它完全)。而 mariabd 持久存储是 var/lib/mysql 而不是 var/lib/mariadb

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 2017-10-12
    • 2018-10-15
    • 1970-01-01
    • 2016-07-01
    • 2021-12-22
    • 2021-03-23
    • 2020-03-17
    • 2021-02-03
    相关资源
    最近更新 更多