- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想做的是,从我的 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
用于 MySQL 的 docker-compose:
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
super 简单。现在让我们启动应用程序:
未知主机,那么让我们试试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
现在我超时了:
如您所见,我得到了错误。我的设置有什么问题以及如何修复这?我有未知的主机异常或拒绝连接或连接超时。
我试过:
注意事项:
我在一台计算机上运行这一切我使用端口 3308 因为我有本地MySQL 数据库 3306。
这是docker ps -a
@Vusal ANSWER 输出:
唯一与答案中的代码不同的是我等待数据库准备好 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 为容器创建默认网络,因此它们可以通过名称相互解析。
关于mysql - Docker MySQL - 无法从 Spring Boot 应用程序连接到 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56441497/
我是一名优秀的程序员,十分优秀!