Docker Portainer使用
Portainer是什么
Docker Portainer是一个轻量级的 Web UI 管理界面,可以用来管理Docker环境。它提供了一个直观的控制台,用户可以通过它来管理Docker主机、容器、网络、卷等Docker资源。
Portainer的主要功能和特点包括:
-
容器管理:可以查看、启动、停止、删除容器,以及查看容器日志和统计信息。
-
镜像管理:可以查看、创建、部署镜像,以及查看镜像层级信息。
-
网络管理:可以查看、创建、删除网络。
-
卷管理:可以查看、创建、删除数据卷。
-
访问控制:支持基于用户和团队的访问控制。
-
监控和分析:提供容器、镜像、网络等的监控和分析功能。
-
服务编排:支持通过可视化界面编排Docker Compose应用。
-
多主机管理:可以管理部署在多个Docker主机上的资源。
总的来说, Portainer 是一个非常好用的 Docker 管理工具,能够大大简化Docker环境的管理和运维工作。对于不熟悉命令行的用户来说,Portainer 提供了一个友好的图形化界面,可以更方便地管理Docker资源。
Portainer的官方网站地址是
https://www.portainer.io/
安装Portainer
注意,最新的v26版本的Docker,在安装protainer后会有些许问题,比如进入容器控制台页面会出错,这里建议降低版本,比如docker25.0.5版本
1.下载汉化
下载地址如下,linux下载tar.gz文件
https://github.com/eysp/public/releases/tag/public
上传到linux服务器的目录中,并解压:
[root@localhost portainer]# tar -xzf public-public.tar.gz
[root@localhost portainer]#
解压后多了一个public-punlic的文件夹:

2.拉取并运行
使用下面的命令安装portainer,如果本地没有会自动拉取镜像
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always
-v /var/run/docker.sock:/var/run/docker.sock
-v portainer_data:/data
-v /wzy/portainer/public-public:/public
portainer/portainer-ce
docker run: 这个命令用于启动一个新的 Docker 容器。-d: 这个参数指定容器以 “detached” 模式运行,也就是在后台运行。-p 8000:8000 -p 9000:9000: 这个参数将容器的 8000 和 9000 端口映射到宿主机的对应端口上,这样我们就可以通过宿主机访问容器内的服务。--name portainer: 给这个容器起名为 “portainer”。--restart=always: 这个参数指定只要 Docker 启动,这个容器就自动重启。-v /var/run/docker.sock:/var/run/docker.sock: 这个参数将宿主机的 Docker 套接字文件挂载到容器内部,这样 Portainer 就可以管理宿主机上的 Docker 服务。-v portainer_data:/data: 这个参数创建了一个名为 “portainer_data” 的数据卷,并挂载到容器的 /data 目录。这样可以保存 Portainer 的配置和数据。-v /wzy/portainer/public-public:/public:将解压的汉化包目录挂载到Portainer容器的/public目录。portainer/portainer-ce: 这是 Portainer 的 Docker 镜像名称,告诉 Docker 使用这个镜像来创建容器。
注意,docker portainer有两个版本:portainer/portainer 和 portainer/portainer-ce:
portainer/portainer是早期版本,已不再更新portainer/portainer-ce是新版本,使用新版本
运行
[root@localhost ~]# docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data -v /wzy/portainer/public-public:/public portainer/portainer-ce
Unable to find image 'portainer/portainer:latest' locally
latest: Pulling from portainer/portainer
94cfa856b2b1: Pull complete
49d59ee0881a: Pull complete
a2300fd28637: Pull complete
Digest: sha256:fb45b43738646048a0a0cc74fcee2865b69efde857e710126084ee5de9be0f3f
Status: Downloaded newer image for portainer/portainer:latest
32d9f2b4d36f04a0984afbc2171a5e26876d39dd8429906760e2b92c3e31ac16
docker ps查看运行的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
32d9f2b4d36f portainer/portainer "/portainer" 20 seconds ago Up 18 seconds 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer
3.验证登录
登录管理界面
使用ip:9000即可,这里的192.168.0.106是我的虚拟机,初次登陆时需要设置一个admin账号的密码,在admin下方输入8位密码创建用户,输入密码后点击创建用户即可 (下方的允许匿名我也勾选上了):

在下一步环境中选择本地连接即可:

然后会进入如下界面:

点击local进入查看容器详情:


上面页面展示的对应如下命令
[root@localhost ~]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 3 901MB 0B (0%)
Containers 3 3 141B 0B (0%)
Local Volumes 1 1 69.07kB 0B (0%)
Build Cache 0 0 0B 0B
[root@localhost ~]#
界面操作
1.启动
启动已停止的mysql容器,勾选后点击启动:

可以看到由红色的stop变为绿色的running:

去虚拟机查看
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
32d9f2b4d36f portainer/portainer "/portainer" 17 minutes ago Up 17 minutes 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer
2d9e86240ee2 mysql:latest "docker-entrypoint.s…" 47 hours ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp wzy-mysql-1
2.查看日志
点击文档标志:

会进入如下页面,可以设置日志显示的行数并下载:

3.查看容器的详细信息
点击如下的圆圈i图标:

进入如下页面,展示容器的配置参数等:

4.查看监控信息
点击统计图标:

进入如下界面,显示各项占用:

5.执行容器命令
点击如下的大于号下划线图标:

在如下页面点击连接:

进入命令执行页面:

6.添加新容器
点击添加容器按钮

进入如下页面填写相关参数,这里以安装nginx为例,然后点击部署容器:
我这里80端口被占用,使用了81,可以用lsof -i :80查看linux 80端口是否被占用

如果想做其他更多设置可以在高级设置中进行,这里就不做设置了:

如果不报错,结果如下:

访问

编排方式安装监控
1.编排配置
Docker-Compose的使用参考:
https://blog.csdn.net/onePlus5T/article/details/139103477
结合本专栏前面的文章Docker-Compose的使用,利用之前的微服务,然后把portainer相关放在了最下面
services:#自定义的服务名,必须小写eureka7001:#指定dockerfile来构建镜像并运行实例,context用来指定Dockerfile所在的目录build:context: /wzy/cloud-images/eurekadockerfile: Dockerfile#image: eureka_docker:1.0 #如果有现成的镜像,可以在这里指定,直接用来运行容器,使用此项要注释掉build及其内容#container_name: eureka01 指定容器的名字,如果不指定,会由docker自动生成ports:- "7001:7001"#挂载容器卷 volumes:- /wzy/eurekaService:/data #指定使用的网络,所有服务的网络一致,即可以使用服务名通信忽略ip地址 networks:- wzy_net#自定义的服务名,必须小写payment8001:build:context: /wzy/cloud-images/pay8001dockerfile: Dockerfile #image: payment01_docker:1.0#container_name: payment01ports:- "8001:8001"volumes:- /wzy/paymentMysqlService:/data networks:- wzy_net#指定本服务依赖的服务,会等依赖的服务运行后在运行本服务 depends_on:- eureka7001 - mysql #自定义的服务名,必须小写 payment8002:build:context: /wzy/cloud-images/pay8002dockerfile: Dockerfile #image: payment02_docker:1.0#container_name: payment02ports:- "8002:8002"volumes:- /wzy/paymentRedisService:/data networks:- wzy_netdepends_on:- eureka7001- redis #自定义的服务名,必须小写,也可以叫别的,springboot服务可以在yaml中将redis的ip换成这个名字 redis:image: redis:6.2.6ports:- "6379:6379"volumes:- /wzy/redis/redis.conf:/etc/redis/redis.conf- /wzy/redis/data:/data networks:- wzy_net#运行指令 command: redis-server /etc/redis/redis.conf #自定义的服务名,必须小写,也可以叫别的,springboot服务可以在yaml中将redis的ip换成这个名字 mysql:image: mysql:latest#环境参数配置environment:#注意这里的密码要和微服务连接mysql的配置对应上MYSQL_ROOT_PASSWORD: '123456'MYSQL_ALLOW_EMPTY_PASSWORD: 'NO'MYSQL_DATABASE: 'mybatis-plus'MYSQL_USER: 'wzy'MYSQL_PASSWORD: '123456'ports:- "3306:3306"volumes: - /wzy/mysql/log:/var/log/mysql- /wzy/mysql/data:/var/lib/mysql- /wzy/mysql/conf:/etc/mysql/conf.dnetworks:- wzy_netcommand: --default-authentication-plugin=mysql_native_password #解决外部无法访问#portainer监控服务portainer:image: portainer/portainer-ceports:- 8000:8000- 9000:9000volumes:- /var/run/docker.sock:/var/run/docker.sock #挂载 Docker 套接字,以便 Portainer 可以管理 Docker 容器- portainer_data:/data # 数据创建持久化存储卷- /wzy/portainer/public-public:/publicrestart: always #确保 Portainer 容器在 Docker 主机重启后自动启动networks:- wzy_net #定义 portainer_data 持久化存储卷。
volumes:portainer_data: #创建网络
networks:wzy_net:
2.运行编排
运行编排文件检查命令:docker-compose config -q,无输出则证明yml格式正确。
再执行编排:docker-compose -f /wzy/docker-compose.yml up -d
[root@localhost wzy]# docker-compose config -q
[root@localhost wzy]# docker-compose -f /wzy/docker-compose.yml up -d
[+] Running 4/4✔ portainer Pulled 20.2s ✔ 0ea73420e2bb Pull complete 0.8s ✔ c367f59be2e1 Pull complete 0.8s ✔ b71b88d796e2 Pull complete 18.9s
[+] Building 103.5s (20/20) FINISHED docker:default=> [eureka7001 internal] load build definition from Dockerfile 0.1s=> => transferring dockerfile: 579B 0.0s=> [payment8002 internal] load metadata for docker.io/library/java:8 16.3s=> [eureka7001 internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [eureka7001 internal] load build context 0.7s=> => transferring context: 48.86MB 0.7s=> CACHED [payment8002 1/3] FROM docker.io/library/java:8@sha256:c1ff613e8ba25 77.1s=> => resolve docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c382 0.0s=> => sha256:d23bdf5b1b1b1afce5f1d0fd33e7ed8afbc084b594b9ccf742 4.73kB / 4.73kB 0.0s=> => sha256:5040bd2983909aa8896b9932438c3f1479d25ae837a5f622 51.36MB / 51.36MB 5.5s=> => sha256:76610ec20bf5892e24cebd4153c7668284aa1d1151b7c3b 42.50MB / 42.50MB 11.0s=> => sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d18 2.00kB / 2.00kB 0.0s=> => sha256:fce5728aad85a763fe3c419db16885eb6f7a670a42824ea6 18.54MB / 18.54MB 9.3s=> => sha256:60170fec2151d2108ed1420625c51138434ba4e0223d30 593.15kB / 593.15kB 6.4s=> => extracting sha256:5040bd2983909aa8896b9932438c3f1479d25ae837a5f6220242a2 13.4s=> => sha256:e98f73de8f0d2ef292f58b004d67bc6e9ee779dcfaff7ebb396464 214B / 214B 6.7s=> => sha256:11f7af24ed9cf47597dd6cf9963bb3e9109c963f0135e869a9e9b4 242B / 242B 7.1s=> => sha256:49e2d6393f32abb1de7c9395c04c822ceb2287383d5a9 130.10MB / 130.10MB 22.3s=> => sha256:bb9cdec9c7f337940f7d872274353b66e118412cbfd433 289.05kB / 289.05kB 9.8s=> => extracting sha256:fce5728aad85a763fe3c419db16885eb6f7a670a42824ea618414b8 2.8s=> => extracting sha256:76610ec20bf5892e24cebd4153c7668284aa1d1151b7c3b0c7d50c 18.9s=> => extracting sha256:60170fec2151d2108ed1420625c51138434ba4e0223d3023353d3f3 0.4s=> => extracting sha256:e98f73de8f0d2ef292f58b004d67bc6e9ee779dcfaff7ebb3964649 0.0s=> => extracting sha256:11f7af24ed9cf47597dd6cf9963bb3e9109c963f0135e869a9e9b49 0.0s=> => extracting sha256:49e2d6393f32abb1de7c9395c04c822ceb2287383d5a90998f7bd8 34.1s=> => extracting sha256:bb9cdec9c7f337940f7d872274353b66e118412cbfd433c711361bc 0.1s=> [eureka7001 2/3] ADD cloud-eureka-server-1.0-SNAPSHOT.jar wzy_eureka.jar 1.1s=> [eureka7001 3/3] RUN bash -c 'touch /wzy_eureka.jar' 1.2s=> [eureka7001] exporting to image 0.2s=> => exporting layers 0.2s=> => writing image sha256:131a3a890a4752e6ee52f37241e34d93e8a7452e68612d1768ec 0.0s=> => naming to docker.io/library/wzy-eureka7001 0.0s=> [payment8002 internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 606B 0.0s=> [payment8001 internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 606B 0.0s=> [payment8001 internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [payment8002 internal] load .dockerignore 0.1s=> => transferring context: 2B 0.0s=> [payment8001 internal] load build context 1.3s=> => transferring context: 66.18MB 1.2s=> [payment8002 internal] load build context 1.1s=> => transferring context: 60.94MB 1.0s=> [payment8002 2/3] ADD cloud-provider-payment8002-1.0-SNAPSHOT.jar wzy_paymen 2.0s=> [payment8001 2/3] ADD cloud-provider-payment8001-1.0-SNAPSHOT.jar wzy_paymen 1.9s=> [payment8002 3/3] RUN bash -c 'touch /wzy_payment8002.jar' 3.5s=> [payment8001 3/3] RUN bash -c 'touch /wzy_payment8001.jar' 3.5s=> [payment8001] exporting to image 0.3s=> => exporting layers 0.3s=> => writing image sha256:231e68f5fc55027ea54ec28db5e2aff53804494641dfe8160ec3 0.0s=> => naming to docker.io/library/wzy-payment8001 0.0s=> [payment8002] exporting to image 0.3s=> => exporting layers 0.3s=> => writing image sha256:13313f5be823f61526bb2b53b7b019545783f52e8d8cdda4bc43 0.0s=> => naming to docker.io/library/wzy-payment8002 0.0s
[+] Running 6/8✔ Network wzy_wzy_net Created 1.0s ✔ Volume "wzy_portainer_data" Created 0.0s ✔ Container wzy-portainer-1 Started 1.6s ✔ Container wzy-eureka7001-1 Started 1.3s ✔ Container wzy-mysql-1 Started 1.3s ✔ Container wzy-redis-1 Started 1.1s ✔ Container wzy-payment8002-1 Started 0.9s ✔ Container wzy-payment8001-1 Started 0.9s
如上即为成功,然后访问portainer,看到所有容器均已启动运行:

相关文章:
Docker Portainer使用
Portainer是什么 Docker Portainer是一个轻量级的 Web UI 管理界面,可以用来管理Docker环境。它提供了一个直观的控制台,用户可以通过它来管理Docker主机、容器、网络、卷等Docker资源。 Portainer的主要功能和特点包括: 容器管理:可以查看、启动、停止、删除容器,以及查看容器…...
创新系列-既要保留<a/>标签右键功能, 又不要href导致点击页面刷新, 希望click实现vue-router跳转
发布时间:2024/05/22 如果您有适合我的项目机会给到我,这是我的简历:Resume 思路: 思路原理:实践发现href为null或者" "的时候是不起作用的 将href属性绑定的固定路径设置为响应式数据变量a,a初…...
【OceanBase诊断调优】—— KVCache 排查手册
原文链接:OceanBase分布式数据库-海量数据 笔笔算数 本文介绍 KVcache 相关问题的排查方法。 KVCache 相关概念 在进行排查前,需要了解几个概念。 pin 一个 cache 块 ( memblock ) 被 pin 住,表示它正在被引用。 cache 的由多个定长的块组成…...
核函数的介绍
1.核函数的介绍: 1、用线性核等于没有用核。 2、多项式核:随着d越大,则 fai(X) 对应的维度将越高。(可以通过d得到对应的fai(X)函数)。 3、高斯核函数:无限维度。 4、tanh核。 2.如何选择核函数的参数&am…...
使用pytorch写一个简单的vae网络用于生成minist手写数字图像
文章目录 代码结果代码 import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torch.utils.data import DataLoader from torchvision impo...
Windows平台让标准输入(stdin)的阻塞立即返回
文章目录 背景介绍代码示例版本1-基本命令处理版本2-多线程命令处理,不阻塞主函数版本3-即使没有用户输入,也能立即退出 背景介绍 在开发命令行工具或控制台应用程序时,经常需要处理用户输入。常规做法是使用标准输入(stdin&…...
Spring中的Aware接口
Spring中的Aware接口 Aware接口介绍 Aware是Spring中的接口,它的作用是可以让Bean获取到运行环境的相关信息。比如获取到上下文、Bean在容器中的名称等。 Spring中提供了很多Aware接口的子类,具体如下: 常用接口的作用如下: …...
FFmpeg滤镜完整列表
FFmpeg滤镜完整列表 滤镜名称 用途 acompressor 压缩音频信号,当输入信号超过某个预设阈值时,压缩器就会开始工作。该滤镜使音量大的部分变得不那么响亮,而音量小的部分相对变得响亮,这样就可以使整体听起来更加均衡,常用于音乐…...
深入探索Python基础:两个至关重要的函数
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、初学者的基石:print与input函数 二、类型转换:从字符串到浮点数…...
探索集合python(Set)的神秘面纱:它与字典有何不同?
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、集合(Set)与字典(Dictionary)的初识 1. …...
火山引擎“奇袭”阿里云
图片|电影《美国队长3》剧照 ©自象限原创 作者丨程心 编辑丨罗辑 大模型价格战,已经不是什么新闻。 从OpenAI发布GPT-4o,将API价格下调50%,并宣布面向普通用户免费开始,就标志着大模型的竞争从性能进入到了成本…...
牛客网刷题 | BC94 反向输出一个四位数
目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 将一个四位数&…...
记一次MySQL执行修改语句超时问题
异常问题 原因分析 这个问题发生在开发环境,怀疑是提交事务时终止项目运行,没有提交该事务,造成死锁 调试该事务时时间太长,为什么说有这个原因呢,因为通过查找日志显示 The client was disconnected by the server …...
linux fork()函数调用原理
在Linux中,fork函数用于创建一个新的进程,该进程是调用进程的子进程。fork函数的实现涉及用户态和内核态之间的交互。下面我将详细说明fork函数在代码流程中的原理和用户态与内核态的交互过程。 用户态调用fork函数: 用户程序调用fork函数,该函数是libc库提供的一个封装函数…...
【电控笔记5.9】编码器脉冲计算速度MT法
总结 编码器的脉冲计算速度可以使用多种方法,其中一种常用的方法是“MT法” (Measuring Time Method),即测量时间法。该方法通过测量编码器脉冲间的时间来计算速度。这种方法在高精度速度测量中非常有效,特别是在速度较低时。 MT法计算速度的基本原理 MT法的基本原理是通过…...
go-zero 实战(4)
中间件 在 userapi 项目中引入中间件。go项目中的中间可以处理请求之前和之后的逻辑。 1. 在 userapi/internal目录先创建 middlewares目录,并创建 user.go文件 package middlewaresimport ("github.com/zeromicro/go-zero/core/logx""net/http&q…...
go语言泛型Generic最佳实践 --- slices包
在go的内置包slices中, 所有的函数函数都使用了泛型, 各种各样的泛型, 可以说这个包绝对是go语言泛型学习的最佳实践之一! 来,先来瞄一眼,看看这个slices包里面的函数原型定义: func BinarySe…...
【神经网络结构可视化】使用 Visualkeras 可视化 Keras / TensorFlow 神经网络结构
文章目录 Visualkeras介绍下载安装代码示例1、导入必要的库2、创建VGG16神经网络模型3、可视化神经网络结构4、完整代码5、使用教程 可视化自己创建的神经网络结构1、导入要的库2、创建自己的神经网络模型3、可视化神经网络结构图4、完整代码 Visualkeras介绍 Visualkeras是一…...
nvm安装nodejs/npm/nvm笔记
1 安装nvm, 指定路径nvm路径: D:\Program_Files\nvm\nvm指定路径nodejs 路径: D:\Program_Files\nvm\nodejs 2 进入nvm安装路径找到settings.xml文件,追加2行,设置镜像 node_mirror: https://npmmirror.com/mirrors/node/ npm_mirror: ht…...
微信小程序源码-基于Java后端的小区租拼车管理信息系统毕业设计(附源码+演示录像+LW)
大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
以太网PHY布局布线指南
1. 简介 对于以太网布局布线遵循以下准则很重要,因为这将有助于减少信号发射,最大程度地减少噪声,确保器件作用,最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确,然…...
