docker创建taomcat8容器并解决tomcat日志时区、开启war发布问题

Docker部署Tomcat与时区及管理配置
本文介绍了如何使用Docker拉取并运行Tomcat 8.5.66镜像,设置容器内时区为Asia/Shanghai,以及通过tzselect工具进行时区确认。同时,文章详细讲解了在Tomcat的catalina.sh中配置时区的方法,以及通过修改tomcat-users.xml文件启用管理角色,以支持manager应用的War文件发布。

拉取镜像

docker pull tomcat:8.5.66

运行

docker run --name Tomcat8 -p 8089:8080 -e TZ="Asia/Shanghai" \
--add-host=master:192.168.99.100 -d tomcat:8.5.66 

//hosts增加域名映射IP
--add-host=master:192.168.99.100 

增加这个之后,数据连接配置就可以为  jdbc:mysql://master:3306/xxx?useUnicode=true&characterEncoding=utf-8&……

解决tomcat日志时区问题

方法一:在$Tomcat_HOME/bin/catalina.sh 中添加如下:

export JAVA_OPTS="$JAVA_OPTS -server -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08"

方法二:使用tzselect进行进行修改

# tzselect
 1) Africa
 2) Americas
 3) Antarctica
 4) Arctic Ocean
 5) Asia
 6) Atlantic Ocean
 7) Australia
 8) Europe
 9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.

选择5

Please select a country.
 1) Afghanistan           18) Israel                35) Palestine
 2) Armenia               19) Japan                 36) Philippines
 3) Azerbaijan            20) Jordan                37) Qatar
 4) Bahrain               21) Kazakhstan            38) Russia
 5) Bangladesh            22) Korea (North)         39) Saudi Arabia
 6) Bhutan                23) Korea (South)         40) Singapore
 7) Brunei                24) Kuwait                41) Sri Lanka
 8) Cambodia              25) Kyrgyzstan            42) Syria
 9) China                 26) Laos                  43) Taiwan
10) Cyprus                27) Lebanon               44) Tajikistan
11) East Timor            28) Macau                 45) Thailand
12) Georgia               29) Malaysia              46) Turkmenistan
13) Hong Kong             30) Mongolia              47) United Arab Emirates
14) India                 31) Myanmar (Burma)       48) Uzbekistan
15) Indonesia             32) Nepal                 49) Vietnam
16) Iran                  33) Oman                  50) Yemen
17) Iraq                  34) Pakistan

选择9

Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time

选择1

The following information has been given:

        China
        Beijing Time

Therefore TZ='Asia/Shanghai' will be used.
Local time is now:      Mon Jul 22 15:55:01 CST 2019.
Universal Time is now:  Mon Jul 22 07:55:01 UTC 2019.
Is the above information OK?
1) Yes
2) No

选择1

# cp /etc/timezone /etc/timezone.bak

cat > /etc/timezone << EOF

Asia/Shanghai

EOF

将之前的catalina.sh脚本注释掉,最后启动Tomcat,时区也是正常的

支持请求manager发布War

vim /usr/local/tomcat/conf/tomcat-users.xml
//修改内容
	  <role rolename="manager-gui"/>
	  <role rolename="manager-script"/>
	  <role rolename="manager-jmx"/>
	  <role rolename="manager-status"/>
	  <user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
<think>我们参考用户提供的引用内容,以及用户的需求:将动态Web项目打包部署到Docker中的Tomcat容器运行。 步骤可以分解为: 1. 在本地开发环境(如IDEA)中将动态Web项目打包成war包。 2. 准备Docker环境,拉取Tomcat镜像。 3. 创建Tomcat容器war包部署到容器的webapps目录下。 4. 运行访问项目。 根据引用内容,具体步骤如下: 一、打包动态Web项目为war包(以IDEA为例): 1. 在项目的pom.xml中设置打包方式为war指定打包名称(可选): ```xml <packaging>war</packaging> <build> <finalName>你的项目名称</finalName> ... </build> ``` 2. 确保项目结构正确(如web.xml等,如果是Servlet 3.0以上可以没有web.xml,使用注解)。 3. 使用Maven的package命令进行打包(在IDEA的Maven工具窗口中点击package,或使用命令行`mvn package`)。 4. 打包完成后,在target目录下会生成war包。 二、在Docker中部署Tomcat运行项目: 1. 拉取Tomcat镜像(例如Tomcat 9.0): ```bash docker pull tomcat:9.0 ``` 2. 创建运行Tomcat容器,同时将本地的war包复制到容器的webapps目录下。有两种常用方式: 方式一:在运行容器时挂载宿主机目录到容器的webapps目录(不推荐,因为可能会覆盖容器内的文件,且需要提前将war包放入挂载目录)。 方式二:先运行一个临时容器,然后使用`docker cp`命令将war包复制到容器内,然后重启容器(但容器重启后war包会解压运行,但这种方式每次部署都要复制重启)。 更推荐的方式是使用Dockerfile构建自定义镜像(如引用[2]所示): 步骤: a. 在war包所在的目录下,创建一个名为Dockerfile的文件,内容如下: ```dockerfile FROM tomcat:9.0 COPY 你的项目名称.war /usr/local/tomcat/webapps/ ``` b. 构建镜像: ```bash docker build -t my-tomcat-app . ``` c. 运行容器: ```bash docker run -d -p 8080:8080 --name my-tomcat-container my-tomcat-app ``` 或者,如果不想构建镜像,也可以先运行容器,然后复制war包(如引用[3]): a. 运行一个Tomcat容器: ```bash docker run -d --name my-tomcat -p 8080:8080 tomcat:9.0 ``` b. 将war包复制到容器中: ```bash docker cp 你的项目名称.war my-tomcat:/usr/local/tomcat/webapps/ ``` c. 重启容器以使Tomcat自动解压war部署: ```bash docker restart my-tomcat ``` 3. 访问项目: 在浏览器中访问:`http://服务器IP:8080/你的项目名称`(注意:如果war包名为demo.war,则项目名称为demo,访问路径为`http://服务器IP:8080/demo`)。 三、注意事项: - 确保宿主机端口8080没有被占用,或者映射到宿主机的其他端口(如`-p 8888:8080`则用8888端口访问)。 - 如果使用Dockerfile构建镜像,每次更新项目只需重新打包war,然后重新构建镜像运行新容器即可。 根据引用[4],如果每次复制文件到容器比较麻烦,可以制作成自定义镜像,这样部署更便捷。 因此,我们推荐使用Dockerfile构建自定义镜像的方式,这样便于版本管理和持续部署。 总结步骤: 1. 打包项目为war包。 2. 编写Dockerfile(内容为基于Tomcat镜像,war包复制到webapps目录)。 3. 构建镜像。 4. 运行容器。 这样,当容器启动时,Tomcat会自动解压war部署应用。 下面是一个完整的示例: 假设项目打包后为`myapp.war`,Dockerfile内容为: ```dockerfile FROM tomcat:9.0 COPY myapp.war /usr/local/tomcat/webapps/ ``` 构建镜像: ```bash docker build -t my-tomcat-app . ``` 运行容器: ```bash docker run -d -p 8080:8080 --name myapp-container my-tomcat-app ``` 访问:`http://localhost:8080/myapp` 如果是在远程服务器上部署,则localhost替换为服务器IP。 注意:如果项目需要连接数据库,且数据库也在Docker中,可以使用Docker Compose来管理多个容器(如Tomcat容器和MySQL容器)。 根据用户提供的引用,我们还可以看到有关于MySQL在Docker中的安装,但用户问题中只涉及Tomcat,所以这里不展开。 现在,我们生成相关问题。</think>### 将动态Web项目部署到DockerTomcat容器 #### 一、项目打包为WAR文件(IDEA操作) 1. **配置`pom.xml`**: ```xml <!-- 设置打包格式 --> <packaging>war</packaging> <!-- 添加Servlet依赖 --> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> </dependencies> <!-- 指定打包名称 --> <build> <finalName>myapp</finalName> </build> ``` 2. **创建入口类**(若使用Spring Boot): ```java public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } } ``` 3. **执行打包**: - 在IDEA的Maven面板选择:`Lifecycle > package` - 生成路径:`target/myapp.war`(文件名由`<finalName>`决定) #### 二、Docker环境准备 1. **拉取Tomcat镜像**: ```bash docker pull tomcat:9.0 ``` 2. **创建专用目录**: ```bash mkdir ~/tomcat_docker && cd ~/tomcat_docker mkdir webapps conf ``` #### 三、部署项目到Tomcat容器 **推荐方案:通过Dockerfile构建自定义镜像** 1. **创建`Dockerfile`**: ```dockerfile FROM tomcat:9.0 COPY myapp.war /usr/local/tomcat/webapps/ EXPOSE 8080 CMD ["catalina.sh", "run"] ``` 2. **构建运行容器**: ```bash # 复制WAR文件到当前目录 cp /path/to/myapp.war . # 构建镜像 docker build -t my-tomcat-app . # 运行容器 docker run -d -p 8080:8080 --name myapp-container my-tomcat-app ``` **替代方案:手动复制WAR文件** ```bash # 启动临时容器 docker run -d --name temp-tomcat tomcat:9.0 # 复制WAR文件 docker cp myapp.war temp-tomcat:/usr/local/tomcat/webapps/ # 重启容器生效 docker restart temp-tomcat ``` #### 四、验证部署 1. **查看容器日志**: ```bash docker logs -f myapp-container ``` 当出现 `Deployment of web application archive [/usr/local/tomcat/webapps/myapp.war] has finished` 表示成功。 2. **访问应用**: ``` http://服务器IP:8080/myapp ``` #### 五、常见问题解决 1. **中文乱码**: ```dockerfile # 在Dockerfile中添加 ENV LANG C.UTF-8 ``` 2. **配置文件持久化**: ```bash docker run -v ~/tomcat_docker/conf:/usr/local/tomcat/conf ... ``` 3. **时区设置**: ```dockerfile ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime ``` > **关键提示**: > - 使用`Dockerfile`构建镜像可实现一键部署[^2] > - 通过`docker cp`直接复制WAR文件适合快速调试[^3] > - 生产环境建议使用Docker Compose管理多容器[^4] --- ### 相关问题 1. 如何优化Docker中的Tomcat容器性能? 2. 在Docker中如何实现Tomcat集群部署? 3. 怎样将Docker容器中的Tomcat日志导出到本地分析? 4. 如何为Docker中的Tomcat配置HTTPS证书? 5. 在云服务器环境下如何实现Docker容器的自动重启策略? [^1]: 通过Maven打包WAR文件是标准部署方式 [^2]: Dockerfile构建镜像可固化部署流程 [^3]: `docker cp`命令适合快速调试场景 [^4]: 容器配置文件持久化可维护性更强
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值