2017-10-22 2 views
-1

私はmysqlとtomcatをSSHと一緒に1つのコンテナに入れています。DockerfileのSSHと一緒にmysqlとtomcatを順番に起動できますか?

mysqlとtomcatを2つのコンテナに分割することができませんでした。私がしたことは、MySQLの公式Dockerfile(link)とdocker-entrypoint.shファイル(link)をフォローして、私自身のDockerfiledocker-entrypoint.shファイルを作成することです。私はdocker-entrypoint.shにいくつかのコマンドを追加して、mysqlの起動後にtomcatまたはSSHを起動しようとしましたが、失敗しました。私はdocker-entrypoint.shexec "[email protected]"前にこのコマンド/usr/local/apache-tomcat-7.0.81/bin/catalina.sh run &を追加しようとした、と私は、Tomcatサーバが起動して見ることができるが、私のアプリケーションは以下のようにJavaのエラーが発生したになります。

log4j:ERROR setFile(null,true) call failed 

java.io.FileNotFoundException: ../logs/jeeplus/jeeplus.log (No such file or directory) 

2017-10-22 12:05:18,056 WARN [springframework.web.context.support.XmlWebApplicationContext] - Exception encountered during context initialization - cancelling refresh attempt 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' defined in class path resource [spring-context-shiro.xml]: Cannot resolve reference to bean 'securityManager' while setting bean property 'securityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityManager' defined in class path resource [spring-context-shiro.xml]: Cannot resolve reference to bean 'sessionManager' while setting bean property 'sessionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionManager' defined in class path resource [spring-context-shiro.xml]: Cannot resolve reference to bean 'sessionDAO' while setting bean property 'sessionDAO'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionDAO' defined in class path resource [spring-context-shiro.xml]: Cannot resolve reference to bean 'shiroCacheManager' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroCacheManager' defined in class path resource [spring-context-shiro.xml]: Cannot resolve reference to bean 'cacheManager' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheManager' defined in class path resource [spring-context.xml]: Invocation of init method failed; nested exception is net.sf.ehcache.CacheException: Disk store path can't be created: ../temp/jeeplus/ehcache 

しかし、私は手動経由でTomcatを起動するためにコンテナに行けばcatalina.sh、私のアプリケーションは正常に動作します。

この問題を解決する方法がわかりません。あなたはこのようなS6、TINIやスーパーバイザーとしてinitシステムを使用する必要があります

+0

はあなたのドッキングウィンドウのファイル – zachdb86

答えて

0

標準練習

。私はs6をお勧めします。豊富なドキュメントを同梱しているプロジェクトには、linkがあります。比較のために非常に使いやすいので、Tiniはあなたのためにもっと適しているでしょう。こちらはlink to their project on githubです。ドッカーのドキュメントでsupervisordを使用する際のウォークスルーもhereです。

説明

それだけで、それはTomcatサーバーを起動します、mysqlは最初に起動するようになりますように、これらのいずれかの間で選択が細かいです。これは、mysqlがTomcatサーバーの起動時に接続を受信する準備ができていないために発生したエラーのようです。あなたのエントリポイントスクリプトでTomcatサーバーを起動する前に、2-5分の睡眠を追加することによって、すぐにこの問題を解決することができ

代替方法(クイック、推奨されません)。これにより、Tomcatを起動する前にmysqlサーバが確実に起動するようになります。これはお勧めしません。ので、あなたのbashスクリプトのように

//mysql init 

... 

sleep 5m 

... 

//tomcat init 
+0

OK、感謝を示すことができます。実際には、私はスーパーバイザーを試みたが、私はどのようにSQL文の実行を処理する必要はありません - 私は私のアプリケーションで私のアプリケーションデータを初期化するためにいくつかのSQL文を実行する必要があることを意味します。 mysql official docker-entrypoint.shはこの機能を私に提供するので、私はmysqlの公式に従うことを選択します。 –

+0

sqlコマンドを実行するbashスクリプトを作成し、supervisordでも別のタスクとして実行してください –

関連する問題