我正在構建一個docker圖片,下面的docker文件中,基本圖片已經安裝了tomcat。當tomcat服務停止時,Docker不會釋放容器內的端口
#RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:temp1234' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
EXPOSE 80
EXPOSE 443
CMD ["/usr/sbin/sshd", "-D"]
CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
然而,當我嘗試運行此容器失敗下面的錯誤
[email protected]:~/docker-work$ sudo docker run -p 2222:22 -p 443:443 -p 80:80 d7d7f93692d7
* Starting Tomcat servlet engine tomcat7
...fail!
上已使用的容器內的檢查中發現的端口。
[email protected]:/var/log/tomcat7# sudo netstat -plntu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1/sshd
tcp6 0 0 :::1024 :::* LISTEN -
tcp6 0 0 :::44546 :::* LISTEN -
tcp6 0 0 127.0.0.1:8005 :::* LISTEN -
tcp6 0 0 :::47342 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN 1/sshd
tcp6 0 0 :::443 :::* LISTEN -
我不確定這些端口是如何被佔用的。
以及容器內部,我無法重新啓動tomcat 的服務,它會因端口綁定異常而失敗。
我想殺了P-ID並啓動tomcat服務,但是netstat輸出沒有給出進程的P-ID。
請建議我怎麼可以在這個容器上啓動tomcat服務
1)netstat列出了22,80和443,因爲它們是容器公開的端口,就像Dockerfile一樣。 2)檢查你的原始圖像沒有啓動Tomcat本身的入口點。 3)查看日誌文件以瞭解哪些端口已被使用。 4)讓容器運行sshd和服務不是最佳實踐。我更喜歡通過CMD [「catalina.sh」,「run」]啓動Tomcat作爲Docker集線器中的Dockerfiles https://hub.docker.com/_/tomcat/ – gile
1.)是的,端口由Docker文件公開, netstat輸出是容器而不是docker主機。 2.)原始圖像已安裝tomcat,但不啓動它。 3.)端口80和443正在使用 –
共享有關錯誤的日誌消息。 – gile