Ошибка при подключении к MySQL из контейнера в контейнер - PullRequest
0 голосов
/ 15 июня 2019

У меня возникают некоторые трудности с подключением из моего приложения scala / slick из одного контейнера к mysql в другом контейнере.

Вот как я запускаю Docker-контейнеры:

// MySQL
docker container run --publish 3306:3306  --name mysqlDb -e MYSQL_ROOT_PASSWORD=123123 -d mysql

// Scala/slick app
docker container run -v /Users/userHome/Sources/slick-dev-box:/home --expose=3306 -it --link mysqlDb:mysql hseeberger/scala-sbt

$ docker ps -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED              STATUS                         PORTS                               NAMES
f12b46821f69        hseeberger/scala-sbt   "bash"                   About a minute ago   Up About a minute              3306/tcp                            gracious_engelbart
afcd1902b741        mysql                  "docker-entrypoint.s…"   About an hour ago    Up 37 minutes                  0.0.0.0:3306->3306/tcp, 33060/tcp   mysqlDb

application.conf

mysql = {
  profile = "slick.jdbc.MySQLProfile$"
  dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
  properties = {
    driver = "com.mysql.cj.jdbc.Driver"
    url  = "jdbc:mysql://172.17.0.2:3360/slick"
    user = "root"
    password = "123123"
  }
}

Error I am getting:

warn] There may be incompatibilities among your library dependencies; run 'evicted' to see detailed eviction warnings.
[info] Running com.avelimited.slick.demo.Runner
[error] (run-main-0) java.sql.SQLTransientConnectionException: mysql - Connection is not available, request timed out after 30005ms.
[error] java.sql.SQLTransientConnectionException: mysql - Connection is not available, request timed out after 30005ms.
[error]     at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:676)
[error]     at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:190)
[error]     at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:155)
[error]     at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:100)
[error]     at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:14)
[error]     at slick.jdbc.JdbcBackend$BaseSession.<init>(JdbcBackend.scala:494)
[error]     at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:46)
[error]     at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:37)
[error]     at slick.basic.BasicBackend$DatabaseDef.acquireSession(BasicBackend.scala:250)
[error]     at slick.basic.BasicBackend$DatabaseDef.acquireSession$(BasicBackend.scala:249)
[error]     at slick.jdbc.JdbcBackend$DatabaseDef.acquireSession(JdbcBackend.scala:37)
[error]     at slick.basic.BasicBackend$DatabaseDef$$anon$3.run(BasicBackend.scala:275)
[error]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[error]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[error]     at java.lang.Thread.run(Thread.java:748)
[error] Caused by: java.lang.NullPointerException
[error]     at slick.jdbc.DriverDataSource.getConnection(DriverDataSource.scala:101)
[error]     at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369)
[error]     at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198)
[error]     at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467)
[error]     at com.zaxxer.hikari.pool.HikariPool.access$100(HikariPool.java:71)
[error]     at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:706)
[error]     at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:692)
[error]     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[error]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[error]     at java.lang.Thread.run(Thread.java:748)
[error] Nonzero exit code: 1

Что я пробовал до сих пор: Я пытался использовать разные порты, такие как 3360 и 33060, но тот же результат. По сети, когда я запускаю ping из контейнера приложения, я получаю ответ от mysql контейнера, и когда я запускаю cat / etc / hosts для контейнера приложения:

root@f12b46821f69:/home# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  mysql afcd1902b741 mysqlDb
172.17.0.3  f12b46821f69

Пожалуйста, дайте мне знать, если есть что-то еще, что я мог бы проверить, чтобы исправить проблему соединения.

1 Ответ

0 голосов
/ 16 июня 2019

Ну, очевидно, проблема была связана с драйвером myql-connector, вот исправление, которое я должен применить:

// Before
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.34"

// After
libraryDependencies += "mysql" % "mysql-connector-java" % "8.0.11"
...