-
使用Docker部署Tomcat
- 1. 獲取鏡像
- 2. 第一次啟動tomcat
- 3.帶參數(shù)啟動
- 4.查看tomcat日志
- 5.時(shí)區(qū)問題
使用Docker部署Tomcat
1. 獲取鏡像
docker pull tomcat:8.5.38
docker images
2. 第一次啟動tomcat
該步驟作用:是為了拷貝容器中Tomcat中的conf下配置文件和webapps下的管理頁面,用于后面自定義Tomcat服務(wù)器配置或者部署應(yīng)用。
第一次啟動:
docker run -d --name tomcat8 -p 8081:8080 tomcat:8.5.38
在宿主機(jī)創(chuàng)建文件夾:
mkdir -p /home/tomcat8
從容器中拷貝配置文件和應(yīng)用到宿主機(jī)中:
docker cp tomcat8:/usr/local/tomcat/conf/ /home/tomcat8/
docker cp tomcat8:/usr/local/tomcat/webapps/ /home/tomcat8/
3.帶參數(shù)啟動
此時(shí),如果直接帶參數(shù)啟動時(shí),會報(bào)有重名的tomcat8容器沖突,報(bào)以下類似錯誤:
Error response from daemon: Conflict. The container name "/tomcat8" is already in use by container "f087d304d5bffa1becc20b9c3668d634caf7bc001fc7ce89bdf5c5b43e3e869e". You have to remove (or rename) that container to be able to reuse that name.
這時(shí)候,需要先將容器tomcat8先停止,再刪除:
docker stop tomcat8
docker remove tomcat8
最后再使用帶參數(shù)的命令啟動:
docker run --name tomcat8 -p 1808:8080 \
-v /home/tomcat8/conf:/usr/local/tomcat/conf \
-v /home/tomcat8/webapps:/usr/local/tomcat/webapps \
-v /home/tomcat8/logs:/usr/local/tomcat/logs \
-v /etc/localtime:/etc/localtime:ro \
-v /serverdata/conf/tsmsg/:/serverdata/conf/tsmsg \
-e TZ=Asia/Shanghai \
-d tomcat:8.5.38
-v /serverdata/conf/tsmsg/:/serverdata/conf/tsmsg
這個為應(yīng)用本身的配置文件映射,根據(jù)實(shí)際需求來設(shè)置配置文件地址。
-v /etc/localtime:/etc/localtime:ro
這個命令的作用是將宿主機(jī)上的時(shí)區(qū)設(shè)置文件(/etc/localtime
)掛載到Docker容器中相同的位置,使容器能夠使用與宿主機(jī)相同的時(shí)區(qū)設(shè)置。
具體來說,這個命令的各部分意義如下:
-
-v
:這是Docker命令用來指定掛載卷的標(biāo)志(Volume)。 -
/etc/localtime
:這是宿主機(jī)上時(shí)區(qū)文件的路徑。該文件包含了當(dāng)前時(shí)區(qū)的信息。 -
:/etc/localtime
:這是容器內(nèi)部的掛載點(diǎn),即容器內(nèi)與宿主機(jī)/etc/localtime
文件對應(yīng)的路徑。 -
:ro
:這表示以只讀方式掛載(Read-Only)。容器可以讀取該文件,但無法修改它,這樣可以防止容器的操作影響宿主機(jī)的時(shí)區(qū)設(shè)置。
這樣做的好處是保證容器內(nèi)的應(yīng)用程序可以正確處理與時(shí)區(qū)相關(guān)的操作,例如記錄日志的時(shí)間戳、執(zhí)行定時(shí)任務(wù)等。這對于需要時(shí)區(qū)一致性的應(yīng)用程序來說非常重要。例如,如果你在上海運(yùn)行宿主機(jī),而你的容器也應(yīng)當(dāng)使用東京的時(shí)區(qū),通過這種方式掛載/etc/localtime
,你的容器將會自動采用上海的時(shí)區(qū),而無需在容器內(nèi)單獨(dú)配置時(shí)區(qū)。
4.查看tomcat日志
-
通過看宿主機(jī)
/home/tomcat8/logs
下的日志 -
通過
docker logs -f tomcat8
查看日志
5.時(shí)區(qū)問題
如果你的應(yīng)用用的是Oracle數(shù)據(jù),可能會遇到這樣的錯:
Caused by: java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found
這個錯誤信息是由Oracle數(shù)據(jù)庫返回的,表示有兩個錯誤:
-
ORA-00604
: 這個錯誤表明在遞歸SQL級別(即Oracle內(nèi)部操作)發(fā)生了錯誤。遞歸SQL是Oracle在處理用戶SQL語句時(shí)內(nèi)部自動執(zhí)行的SQL語句,常見于觸發(fā)器、登錄邏輯等。 -
ORA-01882
: 這個錯誤表明找不到指定的時(shí)區(qū)地區(qū)。當(dāng)數(shù)據(jù)庫或JDBC驅(qū)動試圖訪問特定的時(shí)區(qū)信息,而該信息在數(shù)據(jù)庫的時(shí)區(qū)文件中不存在或未被識別時(shí),就會出現(xiàn)這個錯誤。
這兩個錯誤一起出現(xiàn)可能意味著在執(zhí)行初始化會話時(shí),比如在用戶登錄時(shí)設(shè)置會話的時(shí)間區(qū)域,Oracle發(fā)現(xiàn)它不能識別或找到該時(shí)區(qū)。
這時(shí)候你會搜索到要同步時(shí)區(qū),需先設(shè)置好宿主機(jī)的時(shí)區(qū):
timedatectl set-timezone Asia/Shanghai
再在容器啟動時(shí)添加
-v /etc/localtime:/etc/localtime:ro
或許,會發(fā)現(xiàn)宿主機(jī)的時(shí)間不對,可用文章來源:http://www.zghlxwxcb.cn/news/detail-825057.html
date -s "20240131 11:31:00"
更改一下宿主機(jī)的時(shí)間文章來源地址http://www.zghlxwxcb.cn/news/detail-825057.html
到了這里,關(guān)于使用Docker部署Tomcat的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!