docker 指定根目录 迁移根目录
docker 指定根目录 迁移根目录
- 1、问题描述
- 2、问题分析
- 3、解决方法
- 3.1、启动docker程序前就手动指定docker根目录为一个大的分区(支持动态扩容),事前就根本上解决根目录空间不够问题
- 3.1.0、方法思路
- 3.1.1、docker官网安装文档
- 3.1.2、下载docker安装包
- 3.1.3、安装docker 26.1.0
- 3.1.4、配置docker systemd服务
- 3.2、发现docker根目录爆满了,改变docker根目录为一个大的分区(支持动态扩容),事后解决根目录空间不够问题(需要迁移之前的根目录数据到新的根目录)
- 3.2.1、正常安装docker后 docker根目录是/var/lib/docker
- 3.2.1.1、官网安装文档
- 3.2.1.2、下载docker安装包
- 3.2.1.3、安装docker 26.1.0
- 3.2.1.4、配置docker systemd服务
- 3.2.2、默认根目录安装docker后,创建容器和容器数据一段时间后发现docker根目录空间不够、需要迁移根目录
- 3.2.2.1、创建redis、mysql容器
- 3.2.2.2、创建redis、mysql数据
- 3.2.3、配置新的docker根目录、迁移docker根目录数据到新的根目录
- 3.2.4、重要!!!迁移docker根目录后 确认docker服务正常
- 3.2.4.1、检查容器启动是否正常,docker logs 查看容器启动日志
- 3.2.4.2、执行容器内部服务检测,确认容器服务的接口调用是否正常
- 3.2.4.3、执行df -lh 查看输出确认docker根目录是否已迁移到新路径
1、问题描述
默认启动docker后,默认的docker根目录是/var/lib/docker
使用docker info 命令查看docker根目录
docker info

在有些服务器上,/ 根目录空间非常小而且不能动态扩容,不能承载太多的docker镜像和数据,随着docker的运行,默认的docker根目录是/var/lib/docker 占用空间越来越大,导致/ 目录爆满,系统崩溃。(为什么不扩充根目录呢?因为在有些服务器上根目录不是LVM分区、不能动态扩容)
不指定配置文件,默认启动docker服务后,docker根目录如下,查看docker根目录的组织结构
ls -l /var/lib/docker
整个根目录大小是340K

根目录下各个子目录大小如下

docker 根目录结构如下 这些?所在的地方都是空格
[root@centos ~]# tree /var/lib/docker/
/var/lib/docker/
├── buildkit
│?? ├── cache.db
│?? ├── containerdmeta.db
│?? ├── content
│?? │?? └── ingest
│?? ├── executor
│?? ├── history.db
│?? ├── metadata_v2.db
│?? └── snapshots.db
├── containerd
│?? └── daemon
│?? ├── io.containerd.content.v1.content
│?? │?? └── ingest
│?? ├── io.containerd.metadata.v1.bolt
│?? │?? └── meta.db
│?? ├── io.containerd.runtime.v1.linux
│?? ├── io.containerd.runtime.v2.task
│?? ├── io.containerd.snapshotter.v1.blockfile
│?? ├── io.containerd.snapshotter.v1.native
│?? │?? └── snapshots
│?? ├── io.containerd.snapshotter.v1.overlayfs
│?? │?? └── snapshots
│?? └── tmpmounts
├── containers
├── engine-id
├── image
│?? └── overlay2
│?? ├── distribution
│?? ├── imagedb
│?? │?? ├── content
│?? │?? │?? └── sha256
│?? │?? └── metadata
│?? │?? └── sha256
│?? ├── layerdb
│?? └── repositories.json
├── network
│?? └── files
│?? └── local-kv.db
├── overlay2
│?? └── l
├── plugins
│?? ├── storage
│?? │?? └── ingest
│?? └── tmp
├── runtimes
├── swarm
├── tmp
└── volumes├── backingFsBlockDev└── metadata.db39 directories, 11 files
[root@centos ~]#
2、问题分析
有2个思路解决docker根目录空间爆满的问题
1、整体规划,防患于未然
在docker程序启动前,通过docke daemon的配置文件指定一个很大或者可以动态扩容的文件目录作为docker根目录。
2、后知后觉,整体规划没做好,事后处理
如果在生产环境上,运行docker程序签没有手动指定docker根目录,造成默认的docker根目录就是/var/lib/docker,并且环境已经运行一段时间发现根目录空间不够了,这种情况下仍然可以通过docke daemon的配置文件指定一个很大或者可以动态扩容的文件目录作为docker根目录,只不过要把之前docker根目录/var/lib/docker下哦数据迁移到新的docker根目录即可。。
3、解决方法
3.1、启动docker程序前就手动指定docker根目录为一个大的分区(支持动态扩容),事前就根本上解决根目录空间不够问题
3.1.0、方法思路
在docker启动前,先在配置文件中指定docker根目录,这个根目录的空间要保证非常大,或者这个根目录是能够动态扩容的,比如LVM分区。
linux上docker daemon配置文件是/etc/docker/daemon.json
windwos上docker daemon配置文件是C:\ProgramData\docker\config\daemon.json
本文以linux系统为例描述配置docker根目录方法
参考链接: https://docs.docker.com/config/daemon/
在linux系统上安装完成docker后,先不要启动docker程序。
先编辑docker配置文件/etc/docker/daemon.json
mkdir /etc/docker
vi /etc/docker/daemon.json
注:默认情况下这个docker配置文件是没有的,这里实际也就是新建一个/etc/docker/daemon.json
写入以下内容 其中/path/to/docker是自定义的docker根目录,需要保证/path/to/这个目录存在
{"data-root": "/path/to/docker"
}
然后启动docker服务
systemctl start docker.service
安装过程如下
3.1.1、docker官网安装文档
https://docs.docker.com/engine/install/binaries/
3.1.2、下载docker安装包
官方下载链接:https://download.docker.com/linux/static/stable/
选择最新版 26.1.0 下载

文件名:docker-26.1.0.tgz
3.1.3、安装docker 26.1.0
上传docker-26.1.0.tgz到linux服务器
cd /path/to/docker-26.1.0.tgz
tar -xzvf docker-26.1.0.tgz
cp docker/* /usr/bin/
至此安装完成docker
查看docker版本
docker --version

3.1.4、配置docker systemd服务
vi /etc/systemd/system/docker.service
插入以下内容
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s[Install]
WantedBy=multi-user.target
为docker.service添加可执行权限
chmod +x /etc/systemd/system/docker.service
重新加载docker.service配置文件,使得systemctl识别docker.service
systemctl daemon-reload
配置docker.service开机自启动
systemctl enable docker.service
查看操作系统文件系统目录
df -lTh

编辑docker配置文件/etc/docker/daemon.json
mkdir /etc/docker
vi /etc/docker/daemon.json
注:默认情况下这个docker配置文件是没有的,这里实际也就是新建一个/etc/docker/daemon.json
写入以下内容 其中/home/docker是自定义的docker根目录
{"data-root": "/home/docker"
}
启动docker服务前执行docker info 查看docker根目录 报错:docker服务未在运行
docker info

启动docker服务前查看docker根目录结构,还没有创建docker根目录

然后启动docker服务
systemctl start docker.service
启动docker服务时,会自动创建docker根目录/home/docker

查看docker服务
systemctl status docker.service

查看docker信息
docker info


得知docke的根目录是 /home/docker

查看docker根目录的组织结构
ls -l /home/docker
整个根目录大小是340K、根目录下各个子目录大小如下

导入镜像前查看 /home/docker/overlay2
ls -l /home/docker/overlay2

导入redis镜像文件

导入mysql像文件


查看操作系统文件系统目录
df -lTh

启动docker前的操作系统文件系统目录如下
df -lTh

发现导入2个镜像后 docker根目录所在的/homr分区 就增大了差不多1G。后期docker会导入更多的镜像、docker系统日志会占用很多空间,因此在启动docker服务前先编辑配置文件选择一恶搞大的分区作为docker根目录是很重要的。
3.2、发现docker根目录爆满了,改变docker根目录为一个大的分区(支持动态扩容),事后解决根目录空间不够问题(需要迁移之前的根目录数据到新的根目录)
3.2.1、正常安装docker后 docker根目录是/var/lib/docker
3.2.1.1、官网安装文档
https://docs.docker.com/engine/install/binaries/
3.2.1.2、下载docker安装包
官方下载链接:https://download.docker.com/linux/static/stable/
选择最新版 26.1.0 下载

文件名:docker-26.1.0.tgz
3.2.1.3、安装docker 26.1.0
上传docker-26.1.0.tgz到linux服务器
cd /path/to/docker-26.1.0.tgz
tar -xzvf docker-26.1.0.tgz
cp docker/* /usr/bin/
至此安装完成docker
查看docker版本
docker --version

3.2.1.4、配置docker systemd服务
vi /etc/systemd/system/docker.service
插入以下内容
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s[Install]
WantedBy=multi-user.target
为docker.service添加可执行权限
chmod +x /etc/systemd/system/docker.service
重新加载docker.service配置文件,使得systemctl识别docker.service
systemctl daemon-reload
配置docker.service开机自启动
systemctl enable docker.service
启动docker服务
systemctl start docker.service
查看docker服务
systemctl status docker.service

查看docker信息
docker info


得知docker默认的根目录是 /var/lib/docker

查看docker根目录的组织结构
ls -l /var/lib/docker
整个根目录大小是340K

根目录下各个子目录大小如下

3.2.2、默认根目录安装docker后,创建容器和容器数据一段时间后发现docker根目录空间不够、需要迁移根目录
3.2.2.1、创建redis、mysql容器
上传redis镜像包redis7.2.4.tar、mysql镜像包mysql8.4.0.tar到服务器
导入镜像包前查看dock镜像、docker容器都是空的

导入redis、mysql镜像
cd /path/to/redis7.2.4.tar
docker load -i redis7.2.4.tar
cd /path/to/mysql8.4.0.tar
docker load -i mysql8.4.0.tar

创建redis、mysql容器
docker run --name redis7.2.4 --user=root --net=host --privileged --cap-add=ALL -idt --log-opt max-size=64m --log-opt max-file=3 --restart=always redis:7.2.4
docker run --name mysql8.4.0 --user=root --net=host --privileged --cap-add=ALL -idt -e MYSQL_ROOT_PASSWORD=root --log-opt max-size=64m --log-opt max-file=3 --restart=always mysql:8.4.0
查看redis、mysql容器
docker ps -a

查看docker根目录的组织结构
ls -l /var/lib/docker
整个根目录大小是1.7G,根目录下各个子目录大小如下。仅仅是导入了redis、mysql镜像、创建了redis、mysql容器,仅仅2个容器根目录从最初docker安装后的340K增大到了1.7G,这仅仅是刚刚导入镜像和创建容器后的根目录占用量1.7G。

查看操作系统分区占用情况
df -lTh

等mysql运行一段时间后,假设是业务环境、数据表数据量非常多、很快mysql的空间占用率会急剧增大,这个占用量就在docker根目录里。因为mysql的数据量占用空间属于mysql容器、mysql容器占用空间属于docker根目录,最终导致docker根目录也就是/var/lib/docker占用量急剧增大,最终导致操作系统上docker根目录所在的分区爆满,如果操作系统docker根目录所在的分区不能动态扩容,操作系统很快就会因为docker根目录所在的分区爆满而崩溃。
这种情况下就需要考虑迁移docker根目录数据到新的docker根目录,并且修改docker配置文件指定新的docker根目录。
3.2.2.2、创建redis、mysql数据
下面创建mysql数据表,为了快速创建,直接从其他数据库中备份的sql文件恢复到mysql容器中。
创建mysql数据表前查看mysql容器中mysql根目录占用空间 占用了213M,mysql容器内部查看操作系统分区信息,发现mysql容器的根目录就是docker服务的根目录所在宿主机的分区,因此docker服务根目录一定要大,或者能够动态扩容才行,不然很快就会因为容器的占用空间增大导致docker服务根目录增大,最终导致docker服务的根目录所在宿主机的分区爆满、最终操作系统崩溃。
查看mysql容器内部的mysql配置文件/etc/my.cnf发现mysql根目录是/var/lib/mysql
cat /etc/my.cnf|grep -i dir

这次新安装的mysql容器数据库如下

直接从其他数据库中备份的sql文件恢复到mysql容器中

恢复mysql数据完成

再次查看mysql容器数据库如下
show databases;
use kgc;
select table_name,table_comment,create_time from information_schema.TABLES where table_schema='kgc';
select * from banji;

恢复mysql数据完成后再次查看mysql容器中mysql根目录占用空间 占用从213M增加到了352M。这是因为恢复的数据库表占用了空间。

mysql容器操作系统根目录占用空间从2.4G增大到了2.6G。


mysql容器数据量占用的增大,最终体现在宿主机上就是docker根目录的增大,从1.7G增大到了1.9G。


很快随着mysql容器的占用空间增大,最终会在宿主机上就是docker根目录的增大,最终导致宿主机上docker根目录所在的分区磁盘占用爆满,操作系统崩溃。怎么解决这个问题呢?只需迁移docker根目录到一个比较大的分区即可或者迁移docker根目录到一个可以动态扩展的分区,通常二者都要,把docker根目录迁移到一个空间比较大的而且可以动态扩容的分区即可。
在本博文3.2.3节中如果发现停止docker服务后和开启docker服务后,docker根目录占用空间不同,这是正常的,因为开启docker服务会拉起容器,啦气的容器占用了空间所致。

3.2.3、配置新的docker根目录、迁移docker根目录数据到新的根目录
停止docker服务
systemctl stop docker.service
建立新的docker根目录,执行命令df -h,找一个大的磁盘。这里指定的docker新的根目录是/home/docker
mkdir -p /home/docker

迁移/var/lib/docker目录下面的文件到 新的docker根目录/home/docker/home/docker
rm -rf /home/docker
cp -r /var/lib/docker /home/docker

编辑docker配置文件/etc/docker/daemon.json 指定docker根目录是/home/docker
mkdir /etc/docker
vi /etc/docker/daemon.json
注:默认情况下这个docker配置文件是没有的,这里实际也就是新建一个/etc/docker/daemon.json
写入以下内容 其中/mnt/docker是自定义的docker根目录
{"data-root": "/home/docker"
}
然后启动docker服务
systemctl start docker.service
检查dockerx新的根目录是否配置成功
docker info | grep 'Docker Root Dir'

启动docker服务成功后,确认之前的镜像和容器还在不
docker images
docker ps -a
镜像容器都在,说明本次迁移根目录是成功的。mysql容器没有启动成功需要接下来接续排查。

3.2.4、重要!!!迁移docker根目录后 确认docker服务正常
3.2.4.1、检查容器启动是否正常,docker logs 查看容器启动日志
docker logs -f mysql8.4.0 --tail 200

日志显示是因为没有权限在/tmp下创建新的文件

查看/tmp 权限有写额权限

想到可能是mysql容器挂载目录的权限问题,查看mysql容器挂载目录
docker inspect mysql8.4.0|grep Mounts -C20

看宿主机上挂载目录的权限是不是1777,果然不是1777

查看原docker根目录下这个目录的权限是777
因此修改新docker根目录小这个目录的权限为777
systemctl stop docker.service
chmod -R 1777 /home/docker/volumes/e6265e69cc98fd7098523608fad604830884c4299dcbd6d1ea1aaaa29c6f7469/_data
systemctl start docker.service

然后Mysql容器后仍然报同样的错误
可能是docker根目录下其他的哪个目录权限不对 因此直接更改整个docker根目录权限是777 然后重启docker服务
systemctl stop docker.service
chmod -R 777 /home/docker/
systemctl start docker.service
查看所有容器都是正常启动的状态了

3.2.4.2、执行容器内部服务检测,确认容器服务的接口调用是否正常
进入mysql容器 查看数据库表和迁移docker根目录之前是否一致
登录mysql报错:mysql: [Warning] World-writable config file ‘/etc/my.cnf’ is ignored.

参考链接: https://www.cnblogs.com/hf8051/p/4991699.html
设置/etc/my,cnf的权限为644即可 即root用户可读写,其他用户不可写

再次登录mysql 报错:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

这个问题重启mysql容器即可

然后登录mysql报错:ERROR 1524 (HY000): Plugin ‘mysql_native_password’ is not loaded

这个问题需要修改/etc/my.cnf 在[mysqld]下面添加一行:skip-grant-tables(加上这句话之后重启mysql就可以免输密码登录了)

修改后如下

再次重启mysql容器 可以登录进mysql

查看mysql root用户的auth_plugin是mysql_native_password,这个mysql版本是8.4.0 已经启用了新的auth_plugin:caching_sha2_password,默认是caching_sha2_password。
因为上面恢复数据库数据用的是其他数据库的sql备份文件(这个数据库的auth_plugin是mysql_native_password、并且密码字段也被恢复成了这个数据库的密码 所以现在已经看不到原先的密码字段是什么内容了)导致的。现在只需要更改root用户的plugin为caching_sha2_passwor之后再重置root用户密码即可。
use mysql;
select user,plugin from user;

重置root用户的auth_plugin为caching_sha2_password
update user set plugin='caching_sha2_password' where user='root';

然后就是重置root用户的密码 操作步骤如下:
如果当前root用户authentication_string字段下有内容,先将其设置为空;
select user,authentication_string,plugin from user;

update user set authentication_string='' where user='root';
select user, authentication_string,plugin from user;

然后去掉/etc/my.cnf中的 skip-grant-tables这一行,重启mysql容器
使用root用户进行登录,因为上面设置了authentication_string为空,所以可以免密码登录;
mysql -u root -p
passwrod:直接回车;

然后使用ALTER修改root用户密码;
修改前root密码为空

修改root密码为root
ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;

修改root密码后如下
select user,authentication_string,plugin from user;

至此修改成功; 从新使用新的密码登录root用户即可;

再次登录mysql root用户输入正确密码root即可成功登录

输入错误密码不可登录

查询banji表的数据 和迁移docker根目录之前的数据是一样的。说明mysql容器内部服务没问题。

3.2.4.3、执行df -lh 查看输出确认docker根目录是否已迁移到新路径
迁移docker根目录后 宿主机操作系统执行df -lTh
df -lTh

迁移docker根目录后前 宿主机操作系统执行df -lTh
df -lTh

迁移docker根目录前后 ,宿主机操作系统执行df -lTh查看确实 docker根目录已经从/var/lib/docker变成了/home/docker
以上确认均没问题,至此,本次docker根目录迁移完成。
相关文章:
docker 指定根目录 迁移根目录
docker 指定根目录 迁移根目录 1、问题描述2、问题分析3、解决方法3.1、启动docker程序前就手动指定docker根目录为一个大的分区(支持动态扩容),事前就根本上解决根目录空间不够问题3.1.0、方法思路3.1.1、docker官网安装文档3.1.2、下载docker安装包3.1.3、安装doc…...
React 项目报错解决办法收录
React 使用 引入文件报错 (react 别名配置craco) react ,vue 初始项目都是不支持 别名引入文件的。 vue 一般项目初始化的时候会 在 vue.config.js 文件中配置好,所以不需要我们自己配置react 初始化的时候是没有配置的, 需要我们自己配置 …...
Linux专题-Makefile(1)
1.Makefile中的注释使用 # 2. Makefile中的静默执行。 makefile中,默认情况下执行一行命令前会先把这一行命令打印出来,然后再执行这条命令。如果不想看到打印的命令,则可以使用静默执 行的功能,即仅打印出命令执行的结果。使用方…...
机器学习算法应用——CART决策树
CART决策树(4-2) CART(Classification and Regression Trees)决策树是一种常用的机器学习算法,它既可以用于分类问题,也可以用于回归问题。CART决策树的主要原理是通过递归地将数据集划分为两个子集来构建决…...
Sqli-labs第五,六关
目录 首先找到他们的闭合方式 操作 总结: 第五关根据页面结果得知是字符型但是和前面四关还是不一样是因为页面虽然有东西。但是只有对于请求对错出现不一样页面其余的就没有了。这个时候我们用联合注入就没有用,因为联合注入是需要页面有回显位。如果…...
上海AI Lab开源首个可替代GPT-4V的多模态大模型
与开源和闭源模型相比,InternVL 1.5 在 OCR、多模态、数学和多轮对话等 18 个基准测试中的 8 个中取得了最先进的结果。 上海AI Lab 推出的 InternVL 1.5 是一款开源的多模态大语言模型 (MLLM),旨在弥合开源模型和专有商业模型在多模态理解方面的能力差距…...
Python教程:一文了解PageObject模式
PageObject 模式是一种用于测试自动化的设计模式,它将页面的功能和页面的实现分开,提高了代码的可维护性和可重用性。本文将从基础概念开始,逐步介绍 Python 中的 PageObject 模式,并提供详细的代码示例。 1. 什么是 PageObject 模…...
SpringBoot 启动时查询数据库数据,并赋值给全局变量
创建一个组件 AreaData import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component;import java.u…...
【Python】selenium爬虫常见用法和配置,以及常见错误和解决方法
欢迎来到《小5讲堂》 这是《Python》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言无执行文件代码报错信息错误路径手动下载自动下载 选项配置Ch…...
minio上传文件失败如何解决
1. 做了什么操作 通过接口上传excel文件,返回响应值 2. 错误如图 2. 如何解决 根据错误描述定位到了部署minio的地方minio通过docker部署,找到docker - compose发现配置文件中minio有两个端口,一个是用于api的,一个是用于管理界面…...
Java自动化测试框架--TestNG详解
一. 什么是TestNG TestNG是一个开源的自动化测试框架,它受JUnit和NUnit启发,其中“NG”即表示Next Generation,其功能更强大使用更方便。 二. TestNG配置 2.1 POM文件配置 在maven工程的pom.xml文件中加入以下依赖: <depe…...
【分布式 | 第五篇】何为分布式?分布式锁?和微服务关系?
文章目录 5.何为分布式?分布式锁?和微服务关系?5.1何为分布式?5.1.1定义5.1.2例子5.1.3优缺点(1)优点(2)缺点 5.2何为分布式锁?5.2.1定义5.2.2必要性 5.3区分分布式和微服…...
JavaScript百炼成仙自学笔记——13
函数七重关之六(“new”一个函数) 看个代码: function hello(){console.log(this); } 1、this:也是JavaScript中的一个关键字,永远指向当前函数的调用者 解释一下,有两层意思: ①this要嘛不出现&#…...
【skill】小米10让app永驻后台
小米10(国行), 8128不能让app驻留后台我也忍了,但是12256依然如此,各种尝试,全网检索不杀app的方法,除了在系统设置里调,什么adb、shizuku冰箱冰柜的没一个能用 系统版本试过国行版…...
《架构风清扬-Java面试系列第29讲》聊聊DelayQueue的使用场景
DelayQueue是BlockingQueue接口的一个实现类之一 这个属于基础性问题,老规矩,我们将从使用场景和代码示例来进行讲解 来,思考片刻,给出你的答案 1,使用场景 实现:延迟队列,其中元素只有在其预定…...
说说SpringBoot自动配置原理
Spring Boot的自动配置原理可以概括为:通过读取jar包中的配置信息,并根据项目依赖和条件注解自动配置应用程序所需的bean,从而减少手动配置的工作量。 第一、代码入口 SpringBootApplication 👇 EnableAutoConfiguration &#…...
bash: docker-compose: 未找到命令
bash: docker-compose: 未找到命令 在一台新的服务器上使用 docker-compose 命令时,报错说 docker-compose 命令找不到,在网上试了一些安装方法,良莠不齐,所以在这块整理一下,如何正确快速的安装 docker-compose cd…...
linux 权限和权限的设置
在Linux中,文件和目录的权限是一个重要的安全特性。这些权限决定了哪些用户可以读取、写入或执行某个文件或目录。以下是关于Linux权限和如何设置它们的基本信息。 权限类型 Linux中有三种基本的权限类型: 读取(r):…...
基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…...
springboot3项目练习详细步骤(第一部分:用户业务模块)
目录 环境准备 用户模块 注册 注册接口文档 编辑 实现结构 Spring Validation 登录 登录的接口文档 实现登录逻辑 JWT令牌 完善登录认证 拦截器 获取用户详细信息 接口文档 Usercontroller类中编写方法接口 忽略属性返回 优化代码ThreadLocal 更新用户基本信…...
利用快马平台快速生成virtualbox虚拟机配置脚本,搭建云端开发原型环境
今天想和大家分享一个快速搭建云端开发环境的小技巧。最近在尝试用VirtualBox创建Ubuntu服务器环境时,发现手动配置特别耗时,于是研究了一套自动化脚本方案,配合InsCode(快马)平台的快速生成功能,整个过程变得异常简单。 为什么需…...
告别重复编码:用快马AI自动生成软件库e7c9的高效调用代码
作为一名经常和第三方库打交道的开发者,我深刻体会到手动编写调用代码的繁琐。尤其是像e7c9这样功能强大的软件库,虽然封装完善,但每次调用都需要反复查阅文档、处理边界情况,效率实在不高。最近尝试用InsCode(快马)平台的AI辅助生…...
Matlab_Simulink与Carsim的联合仿 擅长基于群智能算法优化的LQR、PID控制算法,能清晰讲解其中要点哦。对于基于群智能算法的一般路径规划
Matlab/Simulink与Carsim的联合仿 擅长基于群智能算法优化的LQR、PID控制算法,能清晰讲解其中要点哦。对于基于群智能算法的一般路径规划 稍长智能车轨迹跟踪控制方向 熟悉Matlab/Simulink和Carsim的联合仿真呢。这是一个非常专业且热门的研究方向(群智能…...
human-pose-estimation.pytorch:简单而强大的人体姿态估计终极指南
human-pose-estimation.pytorch:简单而强大的人体姿态估计终极指南 【免费下载链接】human-pose-estimation.pytorch The project is an official implement of our ECCV2018 paper "Simple Baselines for Human Pose Estimation and Tracking(https://arxiv.o…...
Unity Shader UV 坐标与纹理平铺Tiling Offset 深度解析
从 UV 空间的数学本质出发,理解 URP 中纹理坐标的缩放(Tiling)与偏移(Offset)控制原理, 并掌握 Shader Graph、HLSL、C# 三种维度的实践技巧。UV 坐标系基础在实时渲染中,UV 坐标是将二维纹理贴…...
JVS-APS智能排产后如何配置移动端扫码报工
报工是在工厂中,确定人员/产线按照计划执行后,提交生产结果数据,那么在APS 完成计划排产后,如何能便捷的报工,下面我们有JVS快速开发平台做了一个报工的应用,实现 aps-mes 之间 任务下发与任务结果反馈的整…...
3个高效技巧:百度网盘秒传工具实现跨平台文件管理
3个高效技巧:百度网盘秒传工具实现跨平台文件管理 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 在数字化时代,高效文件传输…...
企业级OA系统高可用方案:泛微ecology+Nginx负载均衡最佳实践
企业级OA系统高可用架构设计与实践:泛微ecologyNginxResin全栈解决方案 在数字化转型浪潮中,办公自动化系统(OA)已成为企业核心IT基础设施。作为国内领先的协同管理平台,泛微ecology承载着企业关键业务流程,其稳定性直接影响组织运…...
告别Putty和串口助手:这款LVGL开发的LCOM,如何成为我的嵌入式开发调试新宠?
告别Putty和串口助手:这款LVGL开发的LCOM,如何成为我的嵌入式开发调试新宠? 作为一名嵌入式开发者,每天与各种开发板、单片机打交道是家常便饭。调试过程中,串口通信工具就像我们的"第三只手",从…...
RobotStudio机器人轨迹规划:从工件坐标到流畅路径的实战指南
1. 工件坐标系的创建与校准 在RobotStudio中规划机器人轨迹的第一步,就是建立准确的工件坐标系。这就像盖房子前要先打好地基,坐标系就是机器人运动的"地基"。我见过不少新手直接开始示教点位,结果发现机器人总是跑偏,就…...
