无法从docker容器

时间:2018-02-08 18:21:00

标签: java mysql docker intellij-idea

我正在使用docker容器运行应用程序,尝试连接mysql主机

mysql主机是localhost 和我的docker容器在localhost:8080上运行

这是我的config.yml文件

database:
  driverClass: com.mysql.cj.jdbc.Driver
  # TODO: if running locally without k8s, change the service url to your localhost
  url: jdbc:mysql://localhost:3306/locations?useSSL=false
  user: root
  password: root
  maxWaitForConnection: 1s
  validationQuery: "SELECT now()"
  validationQueryTimeout: 3s
  minSize: 8
  maxSize: 32
  checkConnectionWhileIdle: false
  evictionInterval: 10s
  minIdleTime: 1 minute
  checkConnectionOnBorrow: true

当我尝试访问我的应用时,它总是给我异常

ERROR [2018-02-08 18:16:56,508] org.apache.tomcat.jdbc.pool.ConnectionPool: Unable to create initial connections of pool.
! java.net.ConnectException: Connection refused (Connection refused)

我尝试了很多解决方案而不是谷歌:D,但没有什么对我有用!

我的java连接器版本:

编译组:'mysql',名称:'mysql-connector-java',版本:'8.0.9-rc'

任何人都可以帮忙! 我也在ubuntu上运行,

当我尝试从IDE运行我的应用程序时,它运行良好,但是从docker容器中提供异常!

1 个答案:

答案 0 :(得分:0)

如果您的mysql作为docker容器运行,那么您可能需要将docker容器与mysql容器链接:

docker run --link mysql_container_name:db your_application

然后,您可以修改您的jdbc网址以说明jdbc:mysql://db:3306/locations?useSSL=false。这是因为您已将两个docker容器链接在一起,并在docker中将db建立为指向mysql容器的主机名。

如果你的mysql数据库没有在docker容器中运行,而是在本地机器上运行,那么它会变得有点复杂。如果您不在Linux机器上,那么您的Docker容器在技术上运行在Docker的虚拟机中。因此,从容器的角度来看,localhost是docker虚拟机,而不是运行MySQL的物理机器。

如果是这种情况,一个简单的解决方法是在您的jdbc网址中使用您计算机的网络IP地址而不是localhost。假设您机器的IP地址为192.168.0.10

jdbc:mysql://192.168.0.10:3306/locations?useSSL=false