通过Docker容器拒绝访问本地数据库

时间:2019-07-27 18:30:05

标签: spring-boot docker docker-compose mariadb

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

我尝试了不同的配置,从本地主机更改为服务器的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连接到数据库,并且看不到为什么我不能在实际服务器上执行相同的操作。预先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

jdbc:mariadb://db:3306/marketingappdb

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