2017-03-24 18 views
4

私はDockerを試していて、とても新しいものです。私は長い間、ある時点で打たれており、道を辿っていないので、ここでこの質問を思いつきました...Apache Tomcat 8がドッカーコンテナ内で起動しない

問題文 Apacheを含むドッカーファイルから画像を作成しようとしています。 lynxのインストール。いったん完了したら、コンテナの8080上のtomcatにアクセスしようとしています。コンテナは8082のホストに転送されます。しかし、イメージを実行するときに私はコンテナ内で開始されたTomcatを得ることはありません。

ドッカーファイル

画像は、私は方法の下にある2つの

  1. ドッキングウィンドウの実行によりコンテナを実行しようとした構築されてい

    FROM ubuntu:16.10 
    #Install Lynx 
    Run apt-get update 
    Run apt-get install -y lynx 
    
    #Install Curl 
    Run apt-get install -y curl 
    
    #Install tools: jdk 
    Run apt-get update 
    Run apt-get install -y openjdk-8-jdk wget 
    
    #Install apache tomcat 
    Run groupadd tomcat 
    Run useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat 
    Run cd /tmp 
    Run curl -O http://apache.mirrors.ionfish.org/tomcat/tomcat- 8/v8.5.12/bin/apache-tomcat-8.5.12.tar.gz 
    Run mkdir /opt/tomcat 
    Run tar xzvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1 
    Run cd /opt/tomcat 
    Run chgrp -R tomcat /opt/tomcat 
    Run chmod -R g+r /opt/tomcat/conf 
    Run chmod g+x /opt/tomcat/conf 
    Run chown -R tomcat /opt/tomcat/webapps /opt/tomcat/work /opt/tomcat/temp opt/tomcat/logs 
    
    Run cd /opt/tomcat/bin 
    
    Expose 8080 
    CMD /opt/tomcat/bin/catalina.sh run && tail -f /opt/tomcat/logs/catalina.out 
    

    -d -p 8082:8080 IMAGEIDテール-f/dev/null 上記を使用している間、コンテナは動作していますが、Tomcatはコンテナ内で起動されていないため、localhost:8082からアクセスできません。私はドッキングウィンドウのログが

  2. ドッキングウィンドウの実行-d -p 8082 longcontainerid行う場合にも、私には何も表示されません。私はTomcatが起動参照は、tail -fを/ dev/null を開始/path/to/catalina.sh 8080 IMAGEIDのときI 8082:コンテナが起動し、すぐに停止し、私がドッキングウィンドウPSから見るので、再度、ローカルホストからアクセスすることはできませんとして実行されていないされ、上記を使用している間ドッキングウィンドウのログは をlongconatainridありません。

どこに間違っているのか教えていただけますか?

P.S.私はインターネット上で多くを検索しましたが、正しいことを得ることができませんでした。私がはっきりとわからないというコンセプトがあるかもしれません。

+1

https://hub.docker.com/_/tomcat/の参照用Tomcatを使用しないのはなぜですか?ところで、これはあなたの問題ではありません。あなたのDockerファイルであなたのRUNをグループ化する必要があります。https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/ – user2915097

答えて

1

docker run command documentationを見ると、ドキュメントがrunに渡された任意のコマンドがDockerfileで元CMDを上書きすると述べている:

オペレータ(画像からコンテナを実行している人)は、することができます

docker run -d -p 8082:8080 imageid tail -f /dev/null 
:ちょうど新しい COMMAND

1 /そして、あなたが実行して指定することにより、そのCMD命令を上書き

コンテナがCOMMANDtail -f /dev/nullで実行されている場合、tomcatを開始する元のコマンドはです。

実行しようと、あなたの問題を解決するには:

docker run -d -p 8082:8080 imageid 

docker log -f containerId 

をTomcatのが正しく開始されたかどうかを確認するには。

2 /あなたはcatalina.shstart引数を使用しないでください。(あなたがstartを使用する場合、ドッキングウィンドウは、シェルスクリプトとTomcatの終わりに、コンテナを終了し始めるが、は、実行中のプロセスを維持しません)

CMD ["catalina.sh", "run"] 

をTomcatを開始するには:このofficial tomcat Dokerfileを見て、チームが使用しています。

3 /最後に、あなたのコンテナを構築するためにtomcatの公式画像を使用してみませんか?あなたのDockerfileの先頭に

FROM tomcat:latest 

ディレクティブ、およびドッキングウィンドウの画像に使用すると、要素を必要な(新しいファイル、Webアプリケーションの戦争、設定)を追加:あなただけ使用することができます。

+1

ありがとうFrançoisMaturel詳細な返信は 1.私はこのコンセプトを忘れて、私の問題を解決しました。 2.私は2番目の点を認識していましたが、見落としたCommand文でそれを実行していました。 3.私はTomcatの公式イメージを使用していた可能性がありますが、TomcatでLynxをインストールしてインストールしようとしていました.Dockerファイルの助けを借りて複数のアプリケーションをインストールできることを理解できます。ベストプラクティス。したがって、私は複数のdockerfilesにアプリケーションをインストールしたり、自分の環境を準備したりする必要があります。 ありがとうございました。 – Arindam

+0

@Arindam、よろしくお願いします。ドッカーの周りを遊んで、tomcatの周りにソフトウェアや調整を加えるのをやめようとするなら、あなたは公式のイメージを使用して自分のものを追加することができます。これは時々コンテナイメージを作成してプロセスを実際に理解するのには良いことです;) –

関連する問題