当前位置: 首页 > news >正文

记录使用Docker Compose 部署《XAPI项目》遇道的问题及解决方案

《XAPI项目》:GitHub仓库(勿打🚫小破站一个)
这篇文档,主要内容是记录使用Docker Compose 部署《XAPI项目》遇道的问题及解决方案

目录

  • 📚 本地MySQL数据如何导入到容器内的MySQL中
  • ❎ 解决报错:docker-xapi-backend-1 | q.GetUserInfoByUserAccount err=dial tcp 127.0.0.1:3306: connect: connection refused
    • 原因:docker内的后端项目正尝试连接本地的 MySQL 数据库,但由于 Docker 容器内与宿主机是隔离的,所以无法直接连接到宿主机上的服务。
    • 解决:让后端项目连接到 Docker 容器内运行的 MySQL 服务,而不是本地的 MySQL 服务。
  • ❎ 解决报错:docker-xapi-backend-1 | q.GetUserInfoByUserAccount err=Error 1130: Host '172.22.0.5' is not allowed to connect to this MySQL server
    • 原因:因为MySQL 默认情况下限制了远程主机的连接权限
    • 解决:执行以下 SQL 命令允许来自 Docker 容器内的主机连接:
      • 方法一:登录到MySQL数据库服务器修改权限
      • 方法二[推荐⭐️]:将MySQL容器的配置添加到docker-compose.yml文件,并在其中包含初始化脚本,以便在启动容器时自动执行SQL权限设置。
      • 方法三:创建my.cnf 映射到容器内的 MySQL 配置文件,my.cnf内容为:bind-address = 0.0.0.0
  • ❎ 解决报错:项目A 发起http请求给 项目B时,访问被项目B拒绝
    • 原因:项目A 发起http请求给 项目B时,访问的是本地127.0.0.1,而在容器内,127.0.0.1上的端口各个容器间是隔离,不让访问的
    • 解决:将http请求中项目B的域名修改为指定域名,如果是线上项目自然有域名解析到正确的服务器上,如果是本地测试环境,不存在该域名,就改写hosts,将该域名指向本机IP即可
      • 方法一[推荐⭐️]:使用 extra_hosts 往容器内 /etc/hosts 文件中添加记录
      • 方法二:修改Docker容器的hosts文件来实现
  • 📚 如何查看某一个容器内的ip是多少?
  • ❎ 解决报错:Failed to invoke the method GetInvokeUser
    • 原因分析:调用者通过nacos查询接口时,接口还未注册,说明注册方注册时出现了问题
    • 解决:继续看下一个问题就能解决
  • ❎ 解决报错:error message is retry3times request failed,err=Post "http://nacos:8848/nacos/v1/ns/instance": dial tcp 172.23.0.3:8848: connect: connection refused
    • 原因分析:注册方注册接口到nacos时,连接被拒绝,此时nacos应该还没有初始化完成
    • 解决:继续看下一个问题就能解决
  • 📚 关于 depend_on: 只会等待容器启动,而不会等待容器的服务初始化完成
    • 结论:上面两个问题,是因为nacos容器启动后,backend就马上启动去nacos注册接口,而此时nacos服务还未初始化完成,所以注册失败,所以调用方调用失败。解决方法就是:在backend项目内部使用协程,轮询判断nacos初始化成功后,再去注册接口。
  • ❎ 解决报错:前端项目打包后,动态路由失效了
    • 原因:Ant Design Pro 使用的 Umi 可以使用两种路由方式:browserHistory 和 hashHistory。
    • 解决:[Ant Design Pro 部署的官方文档说明](https://pro.ant.design/zh-CN/docs/deploy/)

📚 本地MySQL数据如何导入到容器内的MySQL中

在启动 Docker 容器后,将本地的 MySQL 数据导入到容器内的 MySQL 数据库中。以下是一种方法:

  1. 准备 SQL 导入文件: 首先,在本地创建一个 SQL 导入文件,该文件包含了你要导入的数据。假设你的 SQL 文件名为 data.sql。
  2. 将 SQL 文件复制到容器内: 在 Docker Compose 文件中的 MySQL 服务部分添加一个卷映射,以将 SQL 文件复制到容器内。你可以将 data.sql 文件放在与 Docker Compose 文件相同的目录中,然后使用以下配置将它复制到容器内:
    mysql:
    image: mysql:8.0
    volumes:- ./xapi/mysql8.0/mysql-data:/var/lib/mysql- ./data.sql:/docker-entrypoint-initdb.d/data.sql
    environment:- MYSQL_ROOT_PASSWORD=root- MYSQL_DATABASE=xapi
    ports:- "3306:3306"
    
    上述配置将 ./data.sql 映射到容器内的 /docker-entrypoint-initdb.d/data.sql,这是 MySQL 容器初始化时会自动运行的 SQL 文件目录。
  3. 重启 MySQL 容器: 启动或重新启动 Docker Compose 时,MySQL 容器将会初始化并执行 data.sql 文件中的 SQL 语句,从而导入数据。
  4. 检查数据导入结果: 通过登录到 MySQL 容器来检查数据是否成功导入。你可以使用以下命令登录到 MySQL 容器:
    docker-compose exec mysql mysql -uroot -p
    
    然后输入 MySQL 的 root 密码(在这里是 “root”),并查询数据库以确保数据已导入。

❎ 解决报错:docker-xapi-backend-1 | q.GetUserInfoByUserAccount err=dial tcp 127.0.0.1:3306: connect: connection refused

原因:docker内的后端项目正尝试连接本地的 MySQL 数据库,但由于 Docker 容器内与宿主机是隔离的,所以无法直接连接到宿主机上的服务。

解决:让后端项目连接到 Docker 容器内运行的 MySQL 服务,而不是本地的 MySQL 服务。

以下是一些步骤:

  1. 首先,确保 Docker 容器内的 MySQL 服务已经正确启动和配置,可以从容器内部访问。
  2. 在后端项目的配置中,将 MySQL 主机地址设置为 Docker 容器名称。容器名称在 Docker Compose 中可以通过服务名称直接访问。
    例如,如果你的 MySQL 服务在 Docker Compose 中命名为 mysql,你可以将后端项目的 MySQL 主机地址设置为 mysql。
    ⚠️ 注意,使用MySQL服务名称已经包含了其所在端口,所以拼接时无需在拼接上端口了。
    docker-compose.yml内:
    environment:
    - DB_HOST=mysql  # 设置 MySQL 主机地址为容器名称
    - DB_USER=root
    - DB_PASSWORD=root
    - DB_NAME=xapi
    
    项目内代码:
    // 从环境变量中获取 MySQL 连接信息
    dbHost := os.Getenv("DB_HOST")
    dbUser := os.Getenv("DB_USER")
    dbPassword := os.Getenv("DB_PASSWORD")
    dbName := os.Getenv("DB_NAME")// 构建 MySQL 连接字符串
    dataSourceName := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=true", dbUser, dbPassword, dbHost, dbName)db.MyDB = db.ConnectionPool(dataSourceName)
    
  3. 重新构建和启动项目的 Docker 容器。

❎ 解决报错:docker-xapi-backend-1 | q.GetUserInfoByUserAccount err=Error 1130: Host ‘172.22.0.5’ is not allowed to connect to this MySQL server

原因:因为MySQL 默认情况下限制了远程主机的连接权限

解决:执行以下 SQL 命令允许来自 Docker 容器内的主机连接:

方法一:登录到MySQL数据库服务器修改权限

mysql -uroot -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.22.0.5' IDENTIFIED BY 'your_password' WITH GRANT OPTION;

将 ‘172.22.0.5’ 替换为你的 Docker 容器内部的主机 IP 地址,将 ‘your_password’ 替换为你的 MySQL root 用户的密码。
然后,刷新 MySQL 权限:

FLUSH PRIVILEGES;

方法二[推荐⭐️]:将MySQL容器的配置添加到docker-compose.yml文件,并在其中包含初始化脚本,以便在启动容器时自动执行SQL权限设置。

version: '3'
services:mysql:image: mysql:8.0 # MySQL的Docker镜像名称,你可以根据需要选择版本environment:- MYSQL_ROOT_PASSWORD=root # 设置MySQL的root密码- MYSQL_DATABASE=xapi # 创建一个MySQL数据库,并设置其名称ports:- "3306:3306" # 映射MySQL的端口volumes:- ./docker-mysql8.0/mysql-data:/var/lib/mysql # 将MySQL数据持久化到宿主机的目录- ./init.sql:/docker-entrypoint-initdb.d/init.sql # 将 ./init.sql 映射到容器内的 /docker-entrypoint-initdb.d/init.sql,这是 MySQL 容器初始化时会自动运行的 SQL 初始化脚本目录。

将一个名为 init.sql 的初始化脚本映射到了 MySQL 容器内部的 /docker-entrypoint-initdb.d/init.sql 目录。这个脚本会在 MySQL 容器启动时自动执行。在 init.sql 文件中,你可以添加设置 MySQL 权限的 SQL 命令,init.sql文件内容如下:

-- 授予用户对数据库的访问权限(替换 database_name)
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'%';
-- 举例:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
GRANT ALL PRIVILEGES ON xapi.* TO 'xapiuser'@'%';-- 刷新权限
FLUSH PRIVILEGES;

替换 username 、database_name 为实际的用户名、数据库名称。然后将这个 init.sql 文件与 docker-compose.yml 放在同一目录下,启动 Docker Compose 时,它会自动运行初始化脚本以设置权限。
⚠️ 注意:该init.sql 只会在容器首次启动时执行,一旦执行过,就会生成/var/lib/mysql 中的数据,也就是只要 /var/lib/mysql 中数据不是空的,之后在重启这个容器,都不会触发init.sql的执行。

方法三:创建my.cnf 映射到容器内的 MySQL 配置文件,my.cnf内容为:bind-address = 0.0.0.0

  1. 打开 MySQL 容器的配置文件 /etc/mysql/my.cnf,你可以通过在 Docker Compose 文件中的 MySQL 服务下添加一个 volumes 来挂载这个文件并修改它。
    mysql:# ...volumes:- ./docker-mysql8.0/mysql-data:/var/lib/mysql- ./init.sql:/docker-entrypoint-initdb.d/init.sql- ./my.cnf:/etc/mysql/my.cnf  # 将 my.cnf 映射到容器内的 MySQL 配置文件
    
    创建一个名为 my.cnf 的配置文件并添加以下内容:
    [mysqld]
    bind-address = 0.0.0.0
    
    这将允许 MySQL 服务器接受来自任何 IP 地址的连接。
  2. 重新启动你的 Docker 容器。确保 MySQL 容器已经重新启动并应用了新的配置。

❎ 解决报错:项目A 发起http请求给 项目B时,访问被项目B拒绝

原因:项目A 发起http请求给 项目B时,访问的是本地127.0.0.1,而在容器内,127.0.0.1上的端口各个容器间是隔离,不让访问的

解决:将http请求中项目B的域名修改为指定域名,如果是线上项目自然有域名解析到正确的服务器上,如果是本地测试环境,不存在该域名,就改写hosts,将该域名指向本机IP即可

方法一[推荐⭐️]:使用 extra_hosts 往容器内 /etc/hosts 文件中添加记录

version: '3'networks:xapi_net:services:backend:image: xapi-backend-image # 后端项目的Docker镜像名称ports:- "8090:8090" # 映射后端项目的端口depends_on:- mysql- nacos- gatewayvolumes:- ./docker-xapi-backend/conf:/app/conf # 将MySQL数据持久化到宿主机的目录extra_hosts:- "xapi-gateway.com:192.168.2.104" 

方法二:修改Docker容器的hosts文件来实现

  1. 创建一个自定义的hosts文件,该文件包含你想要的主机名和IP地址的映射。例如,你可以创建一个名为 custom_hosts 的文本文件,内容如下:
    192.168.2.104 xapi-gateway.com
    
  2. 将这个自定义hosts文件挂载到你的Docker容器中。在你的Docker Compose文件或Docker运行命令中,使用 -v 选项来挂载这个文件。假设你要挂载到名为 mycontainer 的容器,可以使用以下命令:
    docker run -d --name mycontainer -v /path/to/custom_hosts:/etc/hosts my_image
    
    或者,如果你正在使用Docker Compose,可以将 volumes 属性添加到你的服务定义中:
    version: '3'
    services:
    myservice:image: my_imagevolumes:- /path/to/custom_hosts:/etc/hosts
    
  3. 重新启动你的容器,以便使用新的hosts文件。你的容器现在应该能够将 xapi-gateway.com 解析为 192.168.2.104。

📚 如何查看某一个容器内的ip是多少?

在该Docker Compose配置中,服务都连接到了一个自定义的网络 xapi_net。可以使用以下命令来查找某个服务容器的IP地址:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

例如,如果你想查找 backend 服务的IP地址,可以运行以下命令:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' backend

❎ 解决报错:Failed to invoke the method GetInvokeUser

详细错误日志

docker-xapi-gateway-1  | 2023-09-09T09:30:53.982Z       WARN    proxy/proxy.go:210      [CallProxy] received rpc err: Failed to invoke the method GetInvokeUser. No provider available for the service tri://:@172.23.0.4:80/?interface=rpc_api.UserInfo&group=&version= from registry nacos://nacos:8848?registry=nacos&registry.group=&registry.label=true&registry.namespace=&registry.preferred=false&registry.role=0&registry.timeout=5s&registry.ttl=10s&registry.weight=0&registry.zone=&remote-client-name=dubbo.registries-nacos-nacos%3A8848&simplified=false on the consumer 172.23.0.4 using the dubbo version 3.0.0 .Please check if the providers have been started and registered.

错误解析:

  1. Failed to invoke the method GetInvokeUser:这是Dubbo服务调用中的一个方法名,表示在Dubbo消费者中尝试调用名为 GetInvokeUser 的方法时出现了问题。
  2. No provider available for the service:这表示Dubbo消费者无法找到提供名为 tri://:@172.23.0.4:80/?interface=rpc_api.UserInfo&group=&version= 的服务的提供者。
  3. from registry nacos://nacos:8848?registry=nacos&registry.group=&registry.label=true&registry.namespace=&registry.preferred=false&registry.role=0&registry.timeout=5s&registry.ttl=10s&registry.weight=0&registry.zone=&remote-client-name=dubbo.registries-nacos-nacos%3A8848&simplified=false:这是从Nacos注册中心获取服务提供者信息的详细信息,它指定了使用Nacos进行服务发现的配置。
  4. Please check if the providers have been started and registered:这是建议,意思是你应该检查服务提供者是否已经启动并在Nacos注册中心进行了注册。

原因分析:调用者通过nacos查询接口时,接口还未注册,说明注册方注册时出现了问题

解决:继续看下一个问题就能解决

❎ 解决报错:error message is retry3times request failed,err=Post “http://nacos:8848/nacos/v1/ns/instance”: dial tcp 172.23.0.3:8848: connect: connection refused

docker-xapi-backend-1  | 2023-09-09T10:06:57.033Z       ERROR   protocol/protocol.go:201        provider service tri://:@:20000/?interface=rpc_api.IntefaceInfo&group=&version= register registry nacos://:@nacos:8848/?interface=rpc_api.IntefaceInfo&group=&version= error, error message is retry3times request failed,err=Post "http://nacos:8848/nacos/v1/ns/instance": dial tcp 172.23.0.3:8848: connect: connection refuseddocker-xapi-backend-1  | 2023-09-09T10:06:57.033Z       ERROR   config/provider_config.go:149   service IntefaceInfoServerImpl export failed! err: Registry protocol new exporter error, registry is {nacos://nacos:8848?nacos.access=&nacos.group=DEFAULT_GROUP&nacos.namespaceId=&nacos.password=&nacos.secret=&nacos.username=&registry=nacos&registry.group=&registry.label=true&registry.namespace=&registry.preferred=false&registry.role=3&registry.timeout=5s&registry.ttl=10s&registry.weight=0&registry.zone=&remote-client-name=dubbo.registries-nacos-nacos%3A8848&simplified=false&timeout=5s}, url is {tri://:20000/rpc_api.IntefaceInfo?accesslog=&app.version=3.0.0&application=dubbo.io&auth=&bean.name=IntefaceInfoServerImpl&cluster=failover&config.tracing=&environment=dev&execute.limit=&execute.limit.rejected.handler=&export=true&interface=rpc_api.IntefaceInfo&loadbalance=random&message_size=4&metadata-type=local&module=sample&name=dubbo.io&organization=dubbo-go&owner=dubbo-go&param.sign=&pid=1&registry=nacos&registry.role=3&release=dubbo-golang-3.0.0&retries=&serialization=&service.filter=echo%2Cmetrics%2Ctoken%2Caccesslog%2Ctps%2Cgeneric_service%2Cexecute%2Cpshutdown&side=provider&timestamp=1694254017&tps.limit.interval=&tps.limit.rate=&tps.limit.rejected.handler=&tps.limit.strategy=&tps.limiter=&warmup=}docker-xapi-backend-1  | 2023-09-09T10:06:57.044Z       ERROR   protocol/protocol.go:201        provider service tri://:@:20000/?interface=rpc_api.UserInfo&group=&version= register registry nacos://:@nacos:8848/?interface=rpc_api.UserInfo&group=&version= error, error message is retry3times request failed,err=Post "http://nacos:8848/nacos/v1/ns/instance": dial tcp 172.23.0.3:8848: connect: connection refused

原因分析:注册方注册接口到nacos时,连接被拒绝,此时nacos应该还没有初始化完成

解决:继续看下一个问题就能解决

📚 关于 depend_on: 只会等待容器启动,而不会等待容器的服务初始化完成

在docker-compose.yml中,我们写了

backend:image: xiaoxiongmao5/xapi-backend:1.0.5container_name: xapi-backendports:- "8090:8090"depends_on:- mysql- nacos	#这里 depends_on nacos,只会等待容器启动- gateway

这意味着虽然backend容器等待nacos容器启动,但它不能确保nacos内部的服务已经完全初始化并准备好接受连接。

要解决这个问题,可以在backend项目内添加一些逻辑来等待nacos服务准备就绪。一种常见的做法是使用一个轮询机制,不断地检查nacos服务是否已经可用。可用后再加载nacos相关的配置。

// 参数: Nacos 服务地址和端口
func RegisterServiceToNacos(nacosHost string, nacosPort int) {// 最大尝试次数和当前尝试次数maxAttempts := 30attempt := 1// 循环检查 Nacos 服务是否可用for attempt <= maxAttempts {url := fmt.Sprintf("http://%s:%d/nacos/health", nacosHost, nacosPort)resp, err := http.Get(url)if err == nil && resp != nil && resp.StatusCode == http.StatusOK {glog.Log.Info("Nacos is up and running, starting backend service...")//开始加载nacos相关的配置LoadDubboConfig()break} else {glog.Log.Infof("Attempt %d: Nacos is not ready yet, waiting...", attempt)attempt++time.Sleep(5 * time.Second)}}if attempt > maxAttempts {glog.Log.Info("Max attempts reached. Nacos may not be available.")// 在这里可以添加适当的错误处理或退出逻辑} else {// Nacos 可用后执行启动后端服务的操作// 示例:启动后端服务// startBackendService()}
}

上述函数将等待Nacos服务最多30次,每次等待5秒,以检查Nacos是否已准备就绪。一旦Nacos服务就绪,它将加载nacos相关的配置。

结论:上面两个问题,是因为nacos容器启动后,backend就马上启动去nacos注册接口,而此时nacos服务还未初始化完成,所以注册失败,所以调用方调用失败。解决方法就是:在backend项目内部使用协程,轮询判断nacos初始化成功后,再去注册接口。

❎ 解决报错:前端项目打包后,动态路由失效了

访问 http://localhost:8000/interface_info/2
显式如下:

Error response
Error code: 404Message: File not found.Error code explanation: HTTPStatus.NOT_FOUND - Nothing matches the given URI.

请求日志如下:

docker-xapi-frontend-1  | 172.22.0.1 - - [09/Sep/2023:16:40:19 +0000] "GET /interface_info/2 HTTP/1.1" 404 555 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" "-"
docker-xapi-frontend-1  | 2023/09/09 16:40:19 [error] 32#32: *18 open() "/usr/share/nginx/html/interface_info/2" failed (2: No such file or directory), client: 172.22.0.1, server: localhost, request: "GET /interface_info/2 HTTP/1.1", host: "localhost", referrer: "http://localhost/"

原因:Ant Design Pro 使用的 Umi 可以使用两种路由方式:browserHistory 和 hashHistory。

解决:Ant Design Pro 部署的官方文档说明

config.ts

export default defineConfig({history: { type: 'browser' }, // 默认是 browser

nginx.conf

server {listen 80;root /usr/share/nginx/html;location / {# 用于配合 browserHistory使用try_files $uri $uri/index.html /index.html;}
}

dockerfile

# 使用一个基础的 Node.js 镜像
FROM node:14 as builder# 设置工作目录
WORKDIR /app# 将本地项目文件复制到容器中
COPY . .# 安装依赖并构建前端应用程序
RUN npm install
RUN npm run build# 第二阶段:使用一个基础的 Nginx 镜像来创建最终的容器
FROM nginx:alpine# 复制自定义Nginx配置文件
COPY nginx.conf /etc/nginx/conf.d/default.conf# 复制构建后的前端文件到 Nginx 的默认站点目录
COPY --from=builder /app/dist /usr/share/nginx/html# 定义容器暴露的端口
EXPOSE 80# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

docker-compose.yml

version: '3'
services:single-frontend:build:context: .dockerfile: Dockerfileports:- "80:80"  # 映射容器的80端口到主机的80端口restart: always  # 总是重新启动容器

相关文章:

记录使用Docker Compose 部署《XAPI项目》遇道的问题及解决方案

《XAPI项目》&#xff1a;GitHub仓库&#xff08;勿打&#x1f6ab;小破站一个&#xff09; 这篇文档&#xff0c;主要内容是记录使用Docker Compose 部署《XAPI项目》遇道的问题及解决方案 目录 &#x1f4da; 本地MySQL数据如何导入到容器内的MySQL中❎ 解决报错&#xff1a;…...

腾讯云OCR实践 - 降低客服财务运营成本

一、 前言&#xff1a; 随着图片时代的飞速发展&#xff0c;大量的文字内容为了优化排版和表现效果&#xff0c;都采用了图片的形式发布和存储&#xff0c;这为内容的传播和安全性带来了很大的便利&#xff0c;需要做重复性劳动。 OCR文字扫描工具也逐渐的应运而生&#xff0c;…...

springboot+vue上传图片

这里是一个简单的示例&#xff0c;演示了如何在Spring Boot中从Vue.js上传图像&#xff1a; 1.前端Vue.js代码&#xff1a; <template><div><input type"file" change"handleFileUpload"><button click"uploadImage">…...

高压电缆护层接地环流及温度在线监测系统

高压电缆的金属护层是电缆的重要组成部分&#xff0c;当缆芯通过电流时&#xff0c;会在金属护层上产生环流&#xff0c;外护套的绝缘状态差、接地不良、金属护层接地方式不正确等等都会引起护套环流异常现象&#xff0c;严重威胁电缆运行安全。 当电缆金属护层环流出现异常时…...

无涯教程-JavaScript - IPMT函数

描述 IPMT函数根据定期,固定的还款额和固定的利率返回给定投资期限内的利息支付。 语法 IPMT (rate, per, nper, pv, [fv], [type])争论 Argument描述Required/OptionalRateThe interest rate per period.RequiredPerThe period for which you want to find the interest a…...

【EI会议征稿】第三届机械自动化与电子信息工程国际学术会议(MAEIE 2023)

第三届机械自动化与电子信息工程国际学术会议&#xff08;MAEIE 2023&#xff09; 第三届机械自动化与电子信息工程国际学术会议&#xff08;MAEIE 2023&#xff09;将于2023年12月15-17日在江苏南京举行。本会议通过与业内众多平台、社会各团体协力&#xff0c;聚集机械自动…...

手写实现LRN局部响应归一化算子

1、重写算子的需求 芯片推理过程中遇到很多算子计算结果不对的情况&#xff0c;原因是封装的算子会在某些特殊情况下计算超限&#xff0c;比如输入shape特别大或者数值特别大时&#xff0c;LRN算子计算会出现NAN值&#xff0c;所以需要重写算子。先对输入数据做一个预处理&…...

朗思科技数字员工通过统信桌面操作系统兼容性互认认证

近日&#xff0c;朗思科技数字员工与统信桌面操作系统V20进行了兼容互认&#xff0c;针对上述产品的功能、兼容性方面&#xff0c;通过共同严格测试表明——朗思科技数字员工在统信桌面操作系统 V20上整体运行稳定&#xff0c;满足功能及兼容性测试要求。 北京朗思智能科技有限…...

十六、Webpack常见的插件和模式

一、认识插件Plugin Webpack的另一个核心是Plugin&#xff0c;官方有这样一段对Plugin的描述&#xff1a; While loaders are used to transform certain types of modules, plugins can be leveraged to perform a wider range of tasks like bundle optimization, asset m…...

ChatGPT新增超强插件:文本直接生成视频、海报,支持自定义修改!

全球著名在线设计平台Canva&#xff0c;在ChatGPT Plus&#xff08;GPT-4&#xff09;上推出了插件功能&#xff0c;用户通过文本提示&#xff0c;几秒钟就能生成演示文稿、PPT插图、电子书封面、宴会邀请函等各种精美设计海报&#xff0c;同时支持生成视频。 该插件最强大的功…...

亚像素边缘提取的例子

求帮忙下载&#xff1a; 1.http://download.csdn.net/detail/pkma75/925394 pkma75 资源积分&#xff1a;1分 备注&#xff1a;pdf格式&#xff0c;用曲线拟合的方法计算亚像素&#xff0c;编程易实现&#xff0c;具有较强的实用价值 2.http://download.csdn.net/detail/kua…...

Wayland:推动Linux桌面进入下一代图形显示时代

文章首发地址 Wayland是Linux系统下的一种图形显示协议&#xff0c;旨在替代X Window System&#xff08;X11&#xff09;作为Linux桌面环境的图形显示服务。下面是对Wayland的详细解释&#xff1a; 背景&#xff1a; 传统的Linux桌面环境使用X Window System&#xff08;X11&…...

mysql外键(foreign key)

简介 MySQL的外键约束用来在两个表数据之间建立链接&#xff0c;其中一张表的一个字段被另一张表中对应的字段约束。也就是说&#xff0c;设置外键约束至少要有两种表&#xff0c;被约束的表叫做从表&#xff08;子表&#xff09;&#xff0c;另一张叫做主表&#xff08;父表&…...

内网穿透——Windows搭建服务器

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力应用场景之一&…...

UE5.1 + Android 环境搭建

官方文档&#xff1a;一定一定一定要参照官方文档&#xff0c;因UE不同版本对应的环境搭建并不完全一致。 准备工作 通过EpicGameLaunch下载Android目标平台。 必须安装jdk1.8并配置环境变量&#xff0c;UE5.1不要使用最新的jdk20&#xff1b;下载地址 安装 Android Studio …...

华为python面试题目

华为Python常见的面试问题包括: Python是如何被解释的?什么是PEP8?Python是怎样管理内存的?什么是Python装饰器?Python提供哪些内置类型?Python中的异常处理是怎样的?什么是Python的上下文管理器?Python中的列表推导式是什么?Python中的生成器是什么?什么是Python的装…...

IP代理安全吗?如何防止IP被限制访问?

你是否遇到过可以正常上网&#xff0c;但访问某个网站却被禁止&#xff1f;注册某个网站账号&#xff0c;却被封号&#xff1f;那都是因为IP出现问题&#xff01;您的IP地址透露很多关于您的信息&#xff0c;包括您的位置和互联网活动。 在本文中&#xff0c;我们将一起了解IP地…...

使用 gst-template 创建自己的 gstreamer 插件

系列文章目录 创建 gstreamer 插件的几种方式 使用 gst-template 创建自己的 gstreamer 插件 使用 gst-plugins-bad 里面的 gst-element-maker 工具创建gstreamer 插件 文章目录 系列文章目录前言一、如何获取 gst-template 仓库代码二、gst-template 相关的软件依赖1. 根据自…...

nginx反向代理,用户访问服务器1的80端口,请求转发至服务器2,3的8882端口

两台应用服务器&#xff0c;一台nginx&#xff0c;用户访问nginx服务器80端口&#xff0c;将请求转发至服务器2和服务器3的8882端口。 1、修改nginx配置文件 upstream backend {server 10.60.16.187:8882;server 10.60.16.188:8882;}server {listen 80;server_name 10.6…...

Python学习笔记:导入txt、xlsx文件并做简单函数处理

1.txt文件 1.1路径 file_path "E:\Python Project\temp.txt" with open(file_path) as f:content1 f.read() 导入文件时&#xff0c;如果直接放文件绝对路径上去会报错&#xff0c;这是因为\P是转义字符 所以在绝对路径前面加r可以避免将引号内的内容识别成转义…...

uniapp 轮播列表左右滑动,滑动到中间放大

html <!-- 轮播 --><view class"heade"><swiper class"swiper" display-multiple-items3 circulartrue previous-margin1rpxnext-margin1rpx current0 change"swiperChange" ><block v-for"(item,index) in list"…...

5. 自动求导

5.1 向量链式法则 ① 例子1是一个线性回归的例子&#xff0c;如下图所示。 5.2 自动求导 5.3 计算图 5.4 两种模型 ① b是之前计算的结果&#xff0c;是一个已知的值。 5.5 复杂度 5.6 自动求导 import torch x torch.arange(4.0) x 结果&#xff1a; ② 在外面计算y关于x的…...

【IEEE会议】 第三届智能通信与计算国际学术会议(ICC 2023)

第三届智能通信与计算国际学术会议 2023 3rd International Conference on Intelligent Communications and Computing 第三届智能通信与计算国际学术会议&#xff08;ICC 2023&#xff09;定于2023年11月24-26日在中国南昌隆重举行。会议旨在为从事智能通信与计算研究的专家学…...

巨人互动|Facebook海外户Facebook风控规则有什么

Facebook是全球最大的社交媒体平台之一&#xff0c;每天有数十亿的用户在其上发布、分享和交流各种内容。为了维护平台的安全性和用户体验&#xff0c;Facebook制定了严格的风控规则来监测和处理违规行为。下面小编讲讲Facebook风控规则。 巨人互动|Google海外户&Google Ad…...

pip命令来查看当前激活的虚拟环境

要查看已安装的虚拟环境&#xff0c;您可以使用以下命令&#xff1a; pip freeze该命令将列出所有已安装的包及其版本信息。在虚拟环境中运行时&#xff0c;它将仅显示该虚拟环境中安装的包。 这将列出所有已创建的虚拟环境以及当前激活的环境。 python -m venv list...

STL stack 和 queue

文章目录 一、stack 类和 queue 类的模拟实现 stack 只允许在一端进行插入删除&#xff0c;是一个后进先出(LIFO)的结构&#xff0c;可以存储任意类型 queue 只允许在一端进行插入&#xff0c;另一端进行删除&#xff0c;是一个先进先出(FIFO)的结构&#xff0c;可以存储任意类…...

阈值回归模型(Threshold Regression Model)及R实现

阈值回归模型是一类回归模型&#xff0c;其中预测变量与结果以阈值依赖的方式相关联。通过引入一个阈值参数&#xff08;也称为转折点&#xff09;&#xff0c;阈值回归模型提供了一种简单而优雅、可解释的方法来建立结果和预测变量之间某些非线性关系的模型。在生物医学领域中…...

无人机通信协议MAVLink简介

Micro Air Vehicle Link(简称MAVLink)用于无人系统(例如,机器人、无人机、无人车、无人船和无人潜航器)。它定义了一组无人系统和地面站之间的消息交换规则。此协议广泛用于无人驾驶系统中,特别是ArduPilot和PX4无人驾驶系统,MAVLink协议提供了强大的功能,不仅用于监视…...

【办公自动化】用Python批量从上市公司年报中获取主要业务信息

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

【sizeof()的使用方式】简洁明了初识C语言

sizeof&#xff08;&#xff09;介绍 sizeof其实仅仅只是一个操作符&#xff0c;我们要注意它并不是一个函数&#xff0c;他就类似与常见的、、-......的操作符&#xff0c;并且sizeof是一个单目操作符。sizeof实际上是获取了数据在内存中所占用的存储空间&#xff0c;以字节为…...

网站建设个人总结/在百度平台如何做营销

小编觉得吧证件照这种东西就有一种“让人露出真面目”的魔力身份证照片更是证件照里的重灾区超过八成的网友表示身份证照是世界上最丑的照片它掀起你的减龄刘海将卡姿兰大眼睛照成死鱼眼让你的脸看起来像被车碾过一样又平又宽很多人对身份证照深恶痛绝绞尽脑汁想换照片某市民谎…...

眼科医院网站设计怎么做/天津优化网络公司的建议

首先我们打开一个测试用的文档。 然后&#xff0c;如果我们需要隐藏某一列&#xff0c;则选中这一列。 在【开始】选项卡的“单元格”组中单击【格式】按钮 在打开的下拉菜单中选择【隐藏和取消隐藏】&#xff0c;根据下级菜单中的相关命令来进行行列的隐藏操作。 选择【隐藏行…...

wordpress 网络图片不显示图片/天津百度推广

TA-Lib(Technical Analysis Library, 即技术分析库)是Python金融量化的高级库,涵盖了150多种股票、期货交易软件中常用的技术分析指标,如MACD、RSI、KDJ、动量指标、布林带等。 首先打开python 安装包下载网站: 官网下载地址 https://www.lfd.uci.edu/~gohlke/pythonlib…...

建个企业网站对公司宣传有用吗/手游推广渠道平台

golang开源项目如今已经狂奔了10年&#xff0c; Google的Go编程语言无疑已经名声大噪。 Go轻巧且易于编译&#xff0c;由于其慷慨的库和抽象可简化并发和分布式&#xff08;读取&#xff1a;云&#xff09;应用程序的开发&#xff0c;因此引起了广泛的关注。 但是&#xff0c;…...

mip网站案例/做推广网络

1、行列式的本质是线性变换的放大率&#xff0c;而矩阵的本质就是个数表。 2、行列式行数列数&#xff0c;矩阵不一定&#xff08;行数列数都等于n的叫n阶方阵&#xff09;&#xff0c;二者的表示方式亦有区别。 3、行列式与矩阵的运算明显不同 &#xff08;1&#xff09; 相…...

政协网站 两学一做专题研讨/中国营销网站

2019独角兽企业重金招聘Python工程师标准>>> 随着《愤怒的小鸟》的发布所受到了广大游戏爱好者的好评&#xff0c;从而大多数游戏开发者在看到《愤怒的小鸟》时&#xff0c;肯定非常想知道该游戏的开发技术&#xff0c;为了满足网友的需求&#xff0c;于是推出了《盛…...