LoginSignup
3
1

More than 1 year has passed since last update.

docker compose 上で SchemaSpy が動かないのを直す (MySQL 8, Apple M1 Mac)

Posted at

はじめに

docker compose だけでサクッと SchemaSpy を使うと、いろいろ動かないので、解決策を書く。

次を前提にする。

  • docker-compose.yaml にサービスを定義
    • SchemaSpy 6.1.0
    • MySQL 8
  • Apple M1 Mac (arm64)

解決策

後述の docker-compose.yaml で動いた。

Docker イメージに JDK を使います。Amazon Corretto を使ってますが、ほかの JDK でも動きます。バージョンは 14 以下である必要があります。

schemaspy-[version].jar は公式 http://schemaspy.org などからダウンロードして ./schemaspy/ に置きます。

ドライバを次からダウンロードして、./schemaspy/drivers/ に置きます。
https://dev.mysql.com/downloads/connector/j/
Select Operating System: "Platform Independent" を選び、"ZIP Archive" を選び、"No thanks, just start my download." を選ぶ。

  schemaspy:
    image: amazoncorretto:8
    volumes:
      - ./schemaspy:/app
    command: >
      java -jar /app/schemaspy-6.1.0.jar
      -db hoge_db
      -t mysql
      -host hoge_host -port 3306 -s hoge_schema -u hoge_user -p hoge_password
      -dp /app/drivers/
      -o /app/outputs/
      -vizjs

実行が終わると ./schemaspy/outputs に HTML などが出力されます。

失敗1:Docker イメージ schemaspy/schemaspy が終わらない

help でも終わらない。トラブルシューティングしづらい。

$ docker run schemaspy/schemaspy:6.1.0 --help
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
Running Main-Class org.springframework.boot.loader.JarLauncher
With drivers:jtds-1.3.1.jar, mariadb-java-client-1.1.10.jar
mysql-connector-java-6.0.6.jar, postgresql-42.1.1.jre7.jar

SchemaSpy は jar ファイルで動くので JDK 上で動かして、次に進めた。

SchemaSpy is just a single executable jar-file (schemaspy-[version].jar)
https://schemaspy.readthedocs.io/en/latest/installation.html#schemaspy

失敗2:いろいろ必要になる

ドライバ

jar ファイルのほかにドライバが必要、デフォルトで探すドライバが古いので、新しいドライバを置いて、SchemaSpy のオプション -dp で置いた場所を読ませる。

Failed to connect to database URL [jdbc:mysql://hoge_host:3306/hoge_schema] Failed to create any of 'com.mysql.cj.jdbc.Driver, com.mysql.jdbc.Driver' driver from driverPath '/mysql/mysql-connector-java-5.1.6-bin.jar' with sibling jars no.
Resulting in classpath: empty
There were missing paths in driverPath:
        /mysql/mysql-connector-java-5.1.6-bin.jar
Use commandline option '-dp' to specify driver location.
If you need to load sibling jars used '-loadjars'
INFO  - StackTraces have been omitted, use `-debug` when executing SchemaSpy to see them
ERROR: 3

Graphviz

jar ファイルのほかに Graphviz が必要。

WARN  - Failed to query Graphviz version using 'dot -V'
Cannot run program "dot": error=2, No such file or directory
INFO  - Graphviz rendered set to ''
..ERROR - RelationShipDiagramError
Failed to produce diagram for: /app/outputs/diagrams/summary/relationships.implied.compact.dot
(中略)
Exception in thread "main" java.lang.reflect.InvocationTargetException
(中略)
Caused by: org.schemaspy.output.diagram.DiagramException: Failed to generate Table diagram
(中略)
Caused by: org.schemaspy.output.diagram.DiagramException: Dot missing or invalid version
(中略)
ERROR: 1

幸い SchemaSpy 6.1.0 から内蔵されたので、オプション -vizjs を指定する

Since version 6.1.0 Graphviz is no longer required. There is an embedded viz.js that can be used by adding command line argument vizjs
https://schemaspy.readthedocs.io/en/latest/installation.html#optional

失敗3:JDK が新しいと出力に失敗する

Exception in thread "main" java.lang.reflect.InvocationTargetException
(中略)
Caused by: java.lang.IllegalArgumentException: viz.js
(中略)
Caused by: java.lang.NullPointerException: Cannot invoke "javax.script.ScriptEngine.eval(String)" because "this.scriptEngine" is null
(中略)
ERROR: 1

Nashorn (javascript engine) was removed in Java 15, see https://openjdk.java.net/jeps/372
https://github.com/schemaspy/schemaspy/issues/753

公式はバージョン 8 を明示しているので、8 を使う。
https://schemaspy.readthedocs.io/en/latest/installation.html#java-8

おわりに

docker compose だけで SchemaSpy を動かした。
思ったよりサクッと動かない。代替を考えたほうがよいのだろうか。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1