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

无法从另一个docker容器连接到docker中运行的mysql,mysql,docker,Mysql,Docker,我有一个运行mysql映像的docker容器,docker run命令- docker run --name=mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql/mysql-server:5.7 我可以从本地主机上的SpringBoot应用程序连接到此数据库:3306,但当我运行SpringBoot应用程序-docker run命令时- docker run --name=myservice -d -p 3306:3306 -p 88

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

docker run --name=mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql/mysql-server:5.7
我可以从本地主机上的SpringBoot应用程序连接到此数据库:3306,但当我运行SpringBoot应用程序-docker run命令时-

docker run --name=myservice -d -p 3306:3306 -p 8888:8888 <image-id>
如何使我的spring boot应用程序连接到运行mysql的容器

编辑:为我的应用程序添加my 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 
spring:
数据源:
url:jdbc:mysql://localhost:3306/
驱动程序类名:com.mysql.jdbc.driver
用户名:root
密码:root
jpa:
show-sql:true
冬眠:
ddl自动:无
h2:
慰问:
enabledt:true

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

将这些容器连接到公共或使用
docker compose
。您可以共享spring boot的
application.yml
文件吗?还请注意,不需要发布mysql容器的端口;这样做将使mysql端口可以公开访问。如果两个容器都连接到同一个网络,那么您的“myservice”容器可以连接到“mysql”容器,使用
mysql
作为主机名,并在其默认(3306)port.oh;另外,看起来您正在发布
myservice
容器的端口
3306
,该端口可能不需要,并且当前与
mysql
容器发布的端口
3306
冲突,因此两者中的一个将失败(冲突的端口/端口已在使用中)
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