无法从另一个Docker容器连接到在docker中运行的mysql

时间:2019-10-01 10:52:55

标签: mysql docker

我有一个运行mysql映像的docker容器,docker运行命令-

docker run --name=mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql/mysql-server:5.7

我能够从本地主机上的SpringBoot应用程序连接到此数据库:3306,但是当我运行springboot应用程序-docker run command-

docker run --name=myservice -d -p 3306:3306 -p 8888:8888 <image-id>

它无法启动,并且在检查我看到的日志后出现以下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 
'liquibase' defined in class path resource 
[org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration
$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is 
liquibase.exception.DatabaseException: 
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

如何使我的spring boot应用程序连接到运行mysql的容器?

编辑:为我的应用添加我的application.yml文件的数据源部分:

spring:
datasource:
    url: jdbc:mysql://localhost:3306/<db-name>
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root
jpa:
    show-sql: true
    hibernate:
        ddl-auto: none
h2:
    console:
        enabledt: true 

1 个答案:

答案 0 :(得分:0)

通过在docker run命令中使用--link mysql并在我的application.yml中将数据源URL从'localhost:3306'更改为'mysql:3306'使其正常工作,因为默认情况下Docker有一个DNS,它可以调用因此,一旦链接并通过重击到``mysql''容器为数据库中的所有IP添加我的用户``root''对我的用户的``root''授予权限,我就可以在另一个容器中通过DB启动我的服务。但是,对于更通用的解决方案,创建网络或使用docker compose似乎是一个更好的主意