2017-03-24 88 views
4

我正在試驗Docker,並且對它很新穎。我很長一段時間,並沒有得到解決方法,因此在這裏想出了這個問題...Apache Tomcat 8不在碼頭集裝箱內啓動

問題聲明: 我想從包含Apache的docker文件創建一個圖像,山貓安裝。一旦完成,我試圖訪問容器的8080上的tomcat,然後將該容器轉發給主機的8082。但是在運行映像時,我從來沒有在容器中啓動tomcat。

的泊塢文件

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 

當圖像被內置我試圖通過兩個以下方法

  1. 搬運工運行運行容器-d -p 8082:8080圖像標識尾-f/dev/null 雖然使用上述內容,但容器正在運行,但tomcat未在容器內啓動,因此無法從localhost:8082訪問。此外,我沒有看到任何東西,如果我執行搬運工人日誌longcontainerid

  2. 搬運工運行-d -p 8082:8080圖像標識/path/to/catalina.sh開始尾-f /開發/空 我看到tomcat的開始時,我做碼頭日誌longconatainrid 雖然使用上面的容器是立即啓動和停止,並沒有運行,因爲我可以從docker ps看到,因此不能從localhost:8082訪問。

任何人都可以請告訴我我要去哪裏嗎?

P.s.我在互聯網上搜索了很多東西,但無法正確處理。可能是有一些概念,我不清楚。

+1

爲什麼不使用https://hub.docker.com/_/tomcat/中的參考Tomcat?順便說一下(這不是你的問題),你應該在你的Dockerfile中將你的RUN分組,請參閱https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/ – user2915097

回答

1

望着docker run command documentation,商務部指出,傳遞給run任何命令將覆蓋原來的CMD在Dockerfile

作爲運營商,你可以(在運行從圖像容器中的人)重寫CMD指令只需指定一個新的COMMAND

1 /然後,當你運行:

docker run -d -p 8082:8080 imageid tail -f /dev/null 

該容器與COMMANDtail -f /dev/null運行,原始命令開始Tomcat是重寫

解決您的問題,嘗試運行:

docker run -d -p 8082:8080 imageid 

docker log -f containerId 

要查看是否Tomcat是正確啓動。

2 /您不應該使用start參數與catalina.sh。看看這個official tomcat Dokerfile,該團隊使用:

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

啓動Tomcat(當你使用start,碼頭工人結束容器在shell腳本和tomcat月底將啓動,但保持一個正在運行的進程) 。

3 /最後,爲什麼不使用tomcat官方鏡像來構建你的容器?你可以只使用:

FROM tomcat:latest 

指令在你Dockerfile的開始,並添加你需要的元素(新文件,web應用戰爭,設置)到碼頭工人的形象。

+1

非常感謝FrançoisMaturel詳細回覆。 1.我錯過了這個概念,它解決了我的問題。 2.我意識到第二點,但在Command命令語句中運行時忽略了它。 3.我可以使用Tomcat的官方鏡像,但試圖在Tomcat中玩耍並安裝lynx ..因此,我可以理解,可以在dockerfile的幫助下安裝多個應用程序,儘管它可能不是最佳實踐。因此,我需要更多地關注安裝應用程序和準備環境的多個dockerfiles。 再次感謝:) – Arindam

+0

@Arindam,不客氣。如果你不想在docker周圍玩耍,並在tomcat周圍添加更多的軟件/調整,你仍然可以使用官方圖片並添加自己的東西。這樣做有時也很好,可以創建容器圖像以便真正理解過程;) –