33人参与 • 2025-02-14 • 云虚拟主机
version: '3' services: tomcat8: restart: always image: tomcat:8.5 container_name: tomcat8.5 ports: - 8080:8080 volumes: - e://docker/tomcat/webapps:/usr/local/tomcat/webapps - e://docker/tomcat/logs:/usr/local/tomcat/logs environment: tz: asia/shanghai links: - db networks: - mynetwork db: image: mysql:8.0.15 restart: always environment: mysql_root_password: 123456 mysql_database: testdocker0901 mysql_user: root mysql_password: 123456 volumes: - e://docker/mysql/data:/var/lib/mysql container_name: mysql8.0 ports: - 4306:3306 networks: - mynetwork networks: mynetwork: driver: bridge
volumes
是 docker-compose.yml
文件中用于指定容器和本地文件系统之间共享数据的部分。
示例中,我们有两个卷配置:
volumes: - e://docker/tomcat/webapps:/usr/local/tomcat/webapps - e://docker/tomcat/logs:/usr/local/tomcat/logs
这两个卷配置将本地文件系统中的两个目录挂载到tomcat容器中的相应位置。
- e://docker/tomcat/webapps:/usr/local/tomcat/webapps
:这个卷配置将本地文件系统中的 e://docker/tomcat/webapps
目录挂载到tomcat容器中的 /usr/local/tomcat/webapps
目录。这意味着tomcat容器中的 /usr/local/tomcat/webapps
目录与本地文件系统中的 e://docker/tomcat/webapps
目录是同步的。任何对这两个目录中的文件的更改都将在容器和本地之间同步。这可以用来将应用程序部署到tomcat容器中。- e://docker/tomcat/logs:/usr/local/tomcat/logs
:这个卷配置将本地文件系统中的 e://docker/tomcat/logs
目录挂载到tomcat容器中的 /usr/local/tomcat/logs
目录。这意味着tomcat容器的日志将保存在本地文件系统的 e://docker/tomcat/logs
目录中。您可以在本地文件系统中查看和分析tomcat容器的日志文件。通过使用卷,您可以轻松地在主机和容器之间共享数据,并在不影响容器的情况下进行文件更改。
请注意:
路径分隔符在windows上是反斜杠(\),但在docker中需要使用正斜杠(/)。因此,在您的实际配置中,可能需要将路径改为 e:/docker/tomcat/webapps
和 e:/docker/tomcat/logs
。
这是一个使用docker compose编排tomcat和mysql容器的docker-compose.yml
文件。
version: '3'
指定了docker compose文件格式的版本号。services
定义了您要运行的服务(容器)。tomcat8
是tomcat容器的服务名称。restart: always
表示容器在出现问题或重新启动时,会自动重新启动。image: tomcat:8.5
指定了tomcat容器使用的镜像版本。container_name: tomcat8.5
指定了tomcat容器的名称。ports
将tomcat容器的8080端口映射到宿主机的8080端口。volumes
将宿主机的目录与tomcat容器的目录进行挂载,用于存储tomcat的webapps和logs文件。environment
指定了tomcat容器的环境变量,这里设置了时区为asia/shanghai。links
指定了tomcat容器与mysql容器的链接,使用mysql容器的别名 db
。db
是mysql容器的服务名称。image: mysql:8.0.15
指定了mysql容器使用的镜像版本。restart: always
表示容器在出现问题或重新启动时,会自动重新启动。environment
指定了mysql容器的环境变量,包括mysql的根密码、数据库名称以及用户名和密码。volumes
将宿主机的目录与mysql容器的目录进行挂载,用于持久化存储mysql的数据。ports
将mysql容器的3306端口映射到宿主机的4306端口。networks
指定了容器使用的网络,这里都使用了名为 mynetwork
的自定义网络。mynetwork
是自定义网络的名称,driver: bridge
指定了网络的驱动程序为桥接模式。这样,您可以通过运行docker-compose up
命令来启动这些容器。
::进入docker-compose.yml文件所在的目录 ::命令启动 docker-compose up -d
可以看到容器已启动:
mysql容器的3306端口映射到宿主机的4306端口,所以这里的端口号填写4306
出现错误2058表明在使用sqlyog连接mysql时,发生了caching_sha2_password插件无法加载的问题。
这是由于mysql 8.0版本开始默认使用caching_sha2_password作为身份验证插件,而较旧的mysql客户端(如sqlyog)可能不支持该插件。
在mysql容器中重新创建用户:
::在正在运行的容器中 查找到mysql容器的名称或id docker ps :: 在mysql容器中打开交互式终端 docker exec -it mysql8.0 sh #登录mysql mysql -h localhost -u root -p 123456 -- 设置root用户密码过期规则为从不过期 (set the root user password expiration rule to never expire) alter user 'root'@'localhost' identified by '123456' password expire never; -- 为root用户设置密码,并使用mysql_native_password插件进行验证 (set a password for the root user and verify it using the mysql_native_password plug-in) alter user 'root'@'%' identified with mysql_native_password by '123456'; -- 刷新权限,使修改后的权限生效 (refresh permissions to make the new permissions take effect) flush privileges;
docker exec -it mysql:8.0 sh
是一个docker命令,用于在名为 mysql
的8.0版本镜像的容器中打开一个交互式的shell终端。
docker exec
是用于在正在运行的容器中执行命令的docker命令。-it
是两个选项的组合。-i
表示保持标准输入打开,以便在终端中输入命令,-t
表示分配伪终端,从而允许我们与终端进行交互。mysql:8.0
是指要操作的容器的名称(或容器id)。这里通过指定镜像名称和版本来创建一个新的容器并启动交互式shell。sh
是要在容器中执行的shell命令。也可以使用 bash
,取决于镜像的配置。使用以上命令,我们可以进入正在运行的mysql:8.0容器的shell终端,以便执行其他命令或与容器进行交互。
请注意,您需要确保已经使用正确的镜像名称和版本以及已经运行了名为 mysql8.0
的容器。
再次使用sqlyog连接数据库
导入项目中使用的mysql数据库
/* testdocker.sql */ create database /*!32312 if not exists*/`testdocker0901` /*!40100 default character set utf8 */; use `testdocker0901`; /*table structure for table `student` */ drop table if exists `student`; create table `student` ( `id` int(10) not null auto_increment comment 'id', `name` varchar(10) not null comment '学生姓名', `sex` tinyint(1) not null comment '1男0女', `age` int(3) not null comment '年龄', primary key (`id`) ) engine=innodb auto_increment=4 default charset=utf8; /*data for the table `student` */ insert into `student`(`id`,`name`,`sex`,`age`) values (1,'张三',0,23),(2,'李四',1,20),(3,'王五',1,22);
在你的spring boot项目中,你可以通过配置文件或者代码来配置连接到mysql容器的数据库连接。
配置文件方式:
1.打开你的spring boot项目中的application.properties
或application.yml
文件。
2.在配置文件中,设置以下属性来配置mysql连接:
spring.datasource.url=jdbc:mysql://db:3306/testdocker0901?useunicode=true&characterencoding=utf8&usessl=true&servertimezone=gmt spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.driver
这里的 db
是你在docker compose文件中命名的mysql容器的别名,testdocker0901
是你在mysql容器中的数据库名称。
useunicode=true&characterencoding=utf8mb4
。usessl
设置为true
。servertimezone
为适当的时区,以确保日期和时间的正确性。在将war包重命名为testtomcatdocker.war
并放置到e://docker/tomcat/webapps
目录的过程中,您可以通过以下步骤完成:
testtomcatdocker.war
。testtomcatdocker.war
文件放置到您的本地文件系统上的e://docker/tomcat/webapps
目录中。确保您已按照上述路径创建了e://docker/tomcat/webapps
目录。这样一来,tomcat容器启动时将会将该目录挂载到容器内部,从而使war包可供tomcat服务器加载和运行。
请确保您的docker compose文件已正确配置将您的本地目录e://docker/tomcat/webapps
挂载到tomcat容器的/usr/local/tomcat/webapps
目录。这样可以确保应用程序能够在容器中正确访问war包。
浏览器中访问 http://localhost:8080/testtomcatdocker
将war包重命名为root.war ,重新部署
浏览器访问 http://localhost:8080 ,点击按钮请求数据,能正常访问,问题解决!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论