PlantUML Server を Docker で動かすときの URL ルート設定
経緯
plantuml/plantuml-server:jetty は、 http://localhost:8080/
で動きますが、歴史的な経緯で http://localhost:8080/plantuml/
で動かしたいと思いました。
docker run 時に -e JAVA_OPTIONS="-Djetty.contextpath=/plantuml"
を付けてみたり、 /var/lib/jetty/start.d
や /usr/local/jetty/etc
等の設定をいじったりしてみても変わってくれず、悩んでいました。
色々試行錯誤して、わりと簡単な形で落ち着きました。
解決
plantuml/plantuml-server:jetty の元となっている jetty の Desc を見ると、こんな記述が。
Deployment
Webapps can be deployed under /var/lib/jetty/webapps in the usual ways (WAR file, exploded WAR directory, or context XML file). To deploy your application to the / context, use the name ROOT.war, the directory name ROOT, or the context file ROOT.xml (case insensitive).
plantuml-server のコンテナを覗いてみると、確かに ROOT.war が置かれているので、これを起動前リネームしてやる感じにしてみました。
docker-entrypoint.sh の前に処理をするスクリプトを作り、
### /srv/plantuml-server/docker-entrypoint-custom.sh (0755)
#!/bin/sh
mv /var/lib/jetty/webapps/ROOT.war /var/lib/jetty/webapps/plantuml.war
exec /docker-entrypoint.sh "$@"
こいつを entrypoint に指定して docker run します。
docker run --rm --name plantuml-server \
-p 127.0.0.1:8080:8080 \
-v /srv/plantuml-server/docker-entrypoint-custom.sh:/docker-entrypoint-custom.sh:ro \
--entrypoint /docker-entrypoint-custom.sh \
plantuml/plantuml-server:jetty \
無事、 http://localhost:8080/plantuml
で動くようになりました。
さいごに
今回に限らず、このやり方は、"わざわざ手元でビルドしなおす程でもない調整" をする時に使えそうです。