GroupSession
古いサーバーですが、CUIであれば活用できそうなので、gsession.warをダウンロードし、docker-composeで立ち上げたところ、下記エラーでlocalhostからも見ることができません。ちなみに、Tomcat:latestでは404 Not Foundで見ることができないため、バージョンを指定して行いました。docker-composeで立ち上げ成功した方おられましたら、アドバイスいただけると幸いです。(これが成功したら、Groupsessionの立ち上げが大分楽になりますね)warファイルがコンテナ内にも展開されたこと、他のコンテナは正しく動作することは確認済みです。【サーバー】 FUJITSU PRIMERGY RX300 S5【OS】 Ubuntu Server 20.04LTS【Docker Version】 20.10.7【docker-compose.yaml】version: '3'services: app: container_name: tomcat image: tomcat:9.0 ports: - 8080:8080 volumes: - ./webapps:/usr/local/tomcat/webapps
【エラーメッセージ】HTTP Status 400 Bad Request _____________________________________________________________________________________________________________________ Type Exception Report Message Invalid character found in the request target [/gsession/"./common/cmn001.do" ]. The valid characters are defined in RFC 7230 and RFC 3986 Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). Exceptionjava.lang.IllegalArgumentException: Invalid character found in the request target [/gsession/"./common/cmn001.do" ]. The valid characters are defined in RFC 7230 and RFC 3986 org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:502) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:269) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:829) Note The full stack trace of the root cause is available in the server logs. _____________________________________________________________________________________________________________________ Apache Tomcat/9.0.54
dockerなしのDebian環境ですが、apt由来のtomcat9下で動いています。試しに、docker環境を作って確認してみます。
確認のために手順を再現してみました。Ubuntu Server 20.4の素の環境に、aptからtomcat9をインストール5.1.1のgsession.warを/var/lib/tomcat9/webapps/に配置systemctlでtomcat9.serviceをrestartブラウザから http://192.168.xxx.xxx:8080/gsession/ にアクセス可能(IPアドレスはサーバに設定したもの)この状態で、OSの起動時からアクセス可能です。ここにapt install docker-composeし、ホームにdocker-compose.ymlを作成。sudo systemctl stop tomcat9.service してから sudo docker-compose upしてみましたがwarは展開されないもののtomcat自体は応答していました。おっしゃっているエラーの再現には何か足りないのだと思いますが、dockerには不慣れなせいか違いがよくわかっていません。
検証ありがとうございます。何が原因か分かりませんが、404 Not Foundにエラーが変わりました。上記エラーは、nginxとの関係で出たのかもしれませんが、記憶が曖昧です…確かに、warファイルは展開どころかコンテナ内にコピーもされていません。引き続き、対処法考えたいと思います。
volumeでマウント指定したにもかかわらず、warがコピーされませんでした。強制的にコピーすると動きました。docker cp gsession.war tomcat:/usr/local/tomcat/webapps/ただし、コンテナ削除するとデータも消えてしまうということなので、根本的な解決方法が必要です。一応、dockerでも構成可能ということが分かりましたので、もう少しdockerの勉強をして再挑戦します。
> volumeでマウント指定したにもかかわらず、warがコピーされませんでした。> 強制的にコピーすると動きました。> docker cp gsession.war tomcat:/usr/local/tomcat/webapps/> ただし、コンテナ削除するとデータも消えてしまうということなので、> 根本的な解決方法が必要です。> 一応、dockerでも構成可能ということが分かりましたので、> もう少しdockerの勉強をして再挑戦します。docker-compose.ymlで与えるのはコンテナ実行時のオプションです。コンテナイメージ作成時には使用されません。つまり、build時にはVolumeでマウントするファイルシステムには何も書かれません。Dockerfileでコンテナイメージを生成したとき、warファイルはコンテナイメージの中に含まれています。実行時に、docker-composeのVolumeで外部ファイルシステムをマウントすると、gsession.warを置いたディレクトリがマウントポイントになるため、コンテナ側からはgsession.warが見えなくなります。GroupSessionをDockerコンテナで永続化する場合、以下のように行いますbuild時(イメージ作成)1.イメージ内に/opt/data/dbのようにデータベースを置くディレクトリを作成2.gsession.warを予め展開して配置3.gsdata.confを変更してデータを/opt/data以下に置くように設定コンテナ実行時コンテナの/opt/data/dbなど、データを置くディレクトリをマウントポイントとして、外部ボリュームをマウントするそうすることで、データが外部ボリューム側に書かれ、永続化が可能となる
上記方法により、warがマウントされ、データの永続化も成功しました。ありがとうございます。マウントフォルダの場所、Tomcatのバージョン指定などを気を付ければ、簡単にGROUPSESSIONが立ち上げられることが分かりました。OS: Ubuntu 20.04.3 LTS任意のフォルダにdocker-compose.yamlを作成し(内容後記)、配下にwebappsフォルダを作成、フォルダ内にgsession.warを配置。docker-compose up -d コマンドでGROUPSESSIONが立ち上がる。[docker-compose.yaml]version: '3'services: app: container_name: tomcat image: tomcat:9.0 ports: - 8080:8080 volumes: - ./webapps:/usr/local/tomcat/webapps
TOP