因?yàn)榉?wù)的httpd和tomcat基礎(chǔ)鏡像版本比較舊,漏洞多,需要升級(jí)至最新版本。在本地環(huán)境和測(cè)試環(huán)境都是直接將dockerfile中的FROM基礎(chǔ)鏡像升級(jí)至最新:
httpd:由httpd:2.4.52-alpine升級(jí)至httpd:2.4.57
tomcat:由4年前的tomcat:last升級(jí)至tomcat:9-jdk21-openjdk-slim
但是在正式環(huán)境docker容器都啟動(dòng)失?。?/p>
其中tomcat報(bào)錯(cuò):canot find /usr/local/tomcat/bin/setclasspath.sh
httd容器報(bào)錯(cuò):線程無(wú)權(quán)啟動(dòng)
在報(bào)錯(cuò)的服務(wù)器上使用tomcat基礎(chǔ)鏡像自定義了一個(gè)空容器以便檢查容器內(nèi)部情況:
FROM tomcat:9-jdk21-openjdk-slim
CMD ["/bin/bash", "-c", "while true; do sleep 1; done"]
檢查結(jié)果發(fā)現(xiàn),報(bào)錯(cuò)的文件 /usr/local/tomcat/bin/setclasspath.sh存在,檢查啟動(dòng)文件/usr/local/tomcat/bin/catalina.sh,發(fā)現(xiàn)了報(bào)錯(cuò)的原因是在判斷語(yǔ)句
if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then
返回了false導(dǎo)致報(bào)錯(cuò)和服務(wù)終止。通過(guò)ls -l命令檢查了一下用戶組和文件的權(quán)限,發(fā)現(xiàn)是root用戶、文件權(quán)限為-rwxr-xr-x,理論上說(shuō)docker容器默認(rèn)就是root用戶,繼續(xù)對(duì)setclasspath.sh使用cat命令和sh命令都無(wú)異常,但是手動(dòng)輸入
if [ -r /usr/local/tomcat/bin/setclasspath.sh ]; then
echo "The file is readable"
else
echo "The file is not readable"
fi
返回的結(jié)果就是The file is not readable,證明容器中if -r命令返回結(jié)果異常。感覺(jué)是基礎(chǔ)鏡像中的權(quán)限命令似乎出現(xiàn)異常,使用--privileged再次啟動(dòng)容器,再次手動(dòng)輸入上述命令,返回The file is readable,結(jié)果正常。對(duì)http容器,啟動(dòng)時(shí)也添加--privileged參數(shù)后,啟動(dòng)正常。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-729424.html
因?yàn)?-privileged參數(shù)會(huì)增大宿主機(jī)的安全風(fēng)險(xiǎn),所以繼續(xù)探究更好的解決方案,猜測(cè)基礎(chǔ)容器的部分命令可能跟宿主機(jī)不兼容導(dǎo)致,遂測(cè)試多個(gè)鏡像版本,發(fā)現(xiàn)基于更舊系統(tǒng)的tomcat:9.0.80-jdk8-corretto-al2和httpd:2.4.57-bullseye能夠滿足無(wú)--privileged參數(shù)正常啟動(dòng)的要求,更加確定了是因?yàn)閔ttpd和tomcat中依賴的系統(tǒng)版本差異導(dǎo)致部分基礎(chǔ)命令異常的猜測(cè)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-729424.html
到了這里,關(guān)于記一次正式環(huán)境升級(jí)docker服務(wù)基礎(chǔ)進(jìn)行版本異常的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!