Docker MySQL-无法从Spring Boot应用连接到MySQL数据库

托马斯·比西亚克(Tomas Bisciak):

我想做的是,从我的spring-boot应用程序连接到Docker中的mysql数据库。每个都放在自己的容器中。

但是我一定做错了,因为我做不到。

为了简单起见:

应用程序属性:

# URL for the mysql db
spring.datasource.url=jdbc:mysql://workaround-mysql:3308/workaround?serverTimezone=UTC&max_allowed_packet=15728640
# User name in mysql
spring.datasource.username=springuser
# Password for mysql
spring.datasource.password=admin
#Port at which application runs
server.port=8080

docker-compose for MySQL:

version: '3'
services:
  workaround-mysql:
    container_name: workaround-mysql
    image: mysql
    environment:
      MYSQL_DATABASE: workaround
      MYSQL_USER: springuser
      MYSQL_PASSWORD: admin
      MYSQL_ROOT_PASSWORD: admin
      MYSQL_ROOT_HOST: '%'
    ports:
      - "3308:3306"
    restart: always

很简单吧?我从数据库开始docker-compose up

在此处输入图片说明

到目前为止,一切似乎工作正常。

现在,我已经启动了db,对于应用程序,这是它的docker-compose.yml

version: '3'
services:

  workaround:
    restart: always
    # will build ./docker/workaround/Dockerfile
    build: ./docker/workaround
    working_dir: /workaround
    volumes:
      - ./:/workaround
      - ~/.m2:/root/.m2
    expose:
      - "8080"
    command: "mvn clean spring-boot:run"

对于它,Dockerfile我使用Linux Alpine和Java。

FROM alpine:3.9
....add java...
RUN apk update
RUN apk add dos2unix --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/community/ --allow-untrusted
RUN apk add bash
RUN apk add maven

超级简单。现在让我们启动应用程序:

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

未知的主机,所以让我们尝试IP:

    docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' workaround-mysql

# URL for the mysql db
spring.datasource.url=jdbc:mysql://172.20.0.2:3308/workaround?serverTimezone=UTC&max_allowed_packet=15728640

现在我超时了:

在此处输入图片说明

As you can see I get error. What is wrong with my setup and how to fix this? Either I have unknown host exception or Refused to connect or connection timeout.

I have tried:

Notes:

  • I run this all on one computer I use port 3308 because I have local MySQL db at 3306.

  • Here is docker ps -a

在此处输入图片说明

@Vusal ANSWER output :

在此处输入图片说明

唯一与答案中的代码不同的事情是我等待数据库准备就绪30秒

command: /bin/bash -c "sleep 30;mvn clean spring-boot:run;"
副词:

试试这个docker-compose.yml

version: '3'
services:
  workaround-mysql:
    container_name: workaround-mysql
    image: mysql
    environment:
      MYSQL_DATABASE: workaround
      MYSQL_USER: springuser
      MYSQL_PASSWORD: admin
      MYSQL_ROOT_PASSWORD: admin
      MYSQL_ROOT_HOST: '%'
    ports:
      - "3308:3306"
    restart: always
  workaround:
    depends_on: 
      - workaround-mysql
    restart: always
    # will build ./docker/workaround/Dockerfile
    build: ./docker/workaround
    working_dir: /workaround
    volumes:
      - ./:/workaround
      - ~/.m2:/root/.m2
    expose:
      - "8080"
    command: "mvn clean spring-boot:run"

并更新您application.properties以使用下一个JDBC连接URL:

spring.datasource.url=jdbc:mysql://workaround-mysql:3306/workaround?serverTimezone=UTC&max_allowed_packet=15728640

当两个容器都在同一个docker-compose文件中时,它应该可以工作,因为docker-compose为容器创建了默认网络,因此它们可以按名称相互解析。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法从spring项目连接到mysql数据库

我无法使用DataGrip数据库客户端从本地主机连接到docker中的mysql

Docker-Rails无法连接localhost mysql数据库

无法将Spring应用程序连接到Mysql数据库

Docker:无法连接Spring Boot和MYSQL

无法从Vibed应用程序连接到MySQL / MariaDB数据库

无法使用docker-compose与mysql和php 7连接到数据库

Spring Boot Data JPA无法连接到MySQL数据库

Spring Boot连接到MySQL docker

将Docker容器连接到远程MySQL数据库

docker-compose-无法连接到MySQL数据库

节点应用无法连接到远程MySQL数据库

从rstudio docker内部连接到主机mysql数据库

无法从Intellij连接到在Docker容器中运行的mySql-“指定的数据库用户/密码组合被拒绝”

无法从Spring Boot Docker容器连接到本地MySQL数据库服务器

无法使用Adminer和docker-compose连接到MySQL数据库

从Django应用docker连接到本地mysql数据库

无法连接到Docker容器中的MySQL数据库

Dockerized Spring Boot应用程序连接到数据库Docker映像

从Spring Boot应用程序连接到本地MySQL数据库时出错

无法通过JWS应用连接到MySQL数据库

无法连接到数据库-MySQL

从docker容器连接到mysql数据库

运行 spring 应用程序的 Jetty Docker 容器无法连接到在 docker 容器外运行的 mysql

docker mysql initdb 脚本无法连接到数据库

无法在docker中使用mysql连接到数据库sonarqube

Docker无法连接到mysql

Spring boot JDBC无法连接到docker容器中的mysql

Docker 中的 SpringBoot 应用程序未连接到 MySQL 数据库