我想做的是,从我的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组合:
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-composup
开始:
到目前为止,一切似乎都很顺利。
现在我已经启动了db,对于应用程序来说,这是它的docker组件。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
现在我得到超时:
正如你们所见,我犯了一个错误。我的设置有什么问题,如何解决?我有未知的主机异常或拒绝连接或连接超时。
我尝试过:
注意:
>
这里是docker ps-a
@Vusal应答输出:
与答案中的代码唯一不同的是,我确实等待数据库准备好30秒
command: /bin/bash -c "sleep 30;mvn clean spring-boot:run;"
为了让服务通过docker与MySql连接,它必须在同一个网络中,请查看docker网络
但为了更好的解决方案,我建议您为MySql和Spring boot编写一个docker compose文件。原因是当你这样做时,它很容易被链接。不需要任何其他配置。
version: "3"
services:
mysql-service:
image: mysql
ports:
- "3306:3306"
environment:
- MYSQL_DATABASE=db
- MYSQL_USER=root
- MYSQL_PASSWORD=pass
- MYSQL_ROOT_PASSWORD=pass
spring-service:
image: springservce:latest
ports:
- "8080:8080"
depends_on:
- mysql-service
到目前为止,您还没有尝试在同一Docker网络上运行这两个容器。
首先,忘记IP地址——无论如何都应该避免使用它。
其次,使用相同的Docker网络启动两个compose实例。
第三,不要暴露端口——在桥接网络中,所有端口都可以被正在运行的容器访问。
>
docker network create foo
修改两个撰写文件,以便它们使用此网络,而不是创建每个自己的:
version: '3.5'
services:
....
networks:
default:
external: true
name: foo
从compose文件中删除expose指令-默认情况下,在一个网络中,所有端口都是公开的
修改连接字符串以使用默认3306
端口而不是3308
享受
试试这个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"
并更新您的应用程序。属性要使用下一个JDBC连接url:
spring.datasource.url=jdbc:mysql://workaround-mysql:3306/workaround?serverTimezone=UTC&max_allowed_packet=15728640
当同一docker compose文件中的两个容器都组成文件时,它应该可以工作,因为docker compose为容器创建默认网络,因此它们可以按名称相互解析。
我正在尝试从Spring Boot应用程序连接到mySQL数据库。然而,当我试图运行它时,它显示出错误。 我如何解决这个问题? 错误 从我的文件中添加代码片段 pom。xml 应用属性 堆栈跟踪 我还没有在sql中手动创建表,因为我认为spring.jpa.hibernate.ddl-Auto=date应该这样做
喂,伙计们! 这是我的第一次,所以我会尽力做到最好。 我想创建一个应用程序,它是运行与Springboot框架,我想把它连接到一个docker容器嵌入MySQL(但Spring启动应用程序不是运行在docker) 所以我一直关注这个帖子 我已经做了我的docker-comact: 我用这个命令运行它: 一切都很好,所以现在我在Spring靴上改变application.properties: 但当
application.yml: 我尝试从运行mysql的命名空间上的另一个pod访问该服务,因为它已经预先安装了mysql-client,并从主机访问该服务。两人都有访问数据库的权限。我还在运行应用程序的pod上tring ping。它发现服务有任何问题。 然后我尝试使用NodePort而不是ClusterIP。什么都没变。 我完全卡住了,不知道出了什么问题。如有任何帮助,不胜感激。
尝试使用主连接字符串和用户名(数据库名)连接到cosmosdb Mongo API 原因:com.mongodb.mongotieoutexception:在等待与com.mongodb.client.internal.mongoclientdelegate$1@3C291AAD匹配的服务器时,在30000 ms后超时。群集状态的客户端视图是{type=replica_set,servers=[{
我在将 rails 2.3.5 应用程序连接到远程数据库时遇到问题。 在我的数据库.yml中,我有: 我得到的错误是: 无法通过套接字连接到本地 MySQL 服务器 (2) 我知道问题不在权限或用户设置上,因为当我使用相同的mysqlgem运行一个简单的ruby脚本时,它会起作用。此外,我的python脚本可以连接,我可以通过CLI与连接 我似乎无法让rails使用192.168.1.113而不是
我已经在一个实例中安装了opsmanager数据库,并在其他实例中安装了应用程序 > 在应用程序数据库服务器中,i时显示127.0.0.1:27017运行mongod 当我用sudo服务mongodb-mms启动时,会出现以下错误 uri=mongoDb://db_instance_publicip:27017/?maxpoolsize=150}错误:在等待连接时超时30000 ms后.....