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

【Docker从入门到进阶】06.常见问题与解决方案 07.总结与资源

6. 常见问题与解决方案

在使用Docker进行开发和部署过程中,可能会遇到各种问题。以下是一些常见问题及其解决方案:

容器启动失败和调试

在使用 Docker 时,容器启动失败或立即退出可能会导致一定的困扰,以下是进一步深入解决该问题的一些方法和技巧:

检查支持文件和依赖

  1. 错误日志和输出信息:

    • 使用 docker logs <container_id> 获取容器的标准输出和错误日志。如果容器反复退出,可以结合 --tail=n-f 选项来限制输出的行数或实时查看日志。
    • 如果应用程序支持,将其日志输出到标准输出而不是文件来便于日志采集。
  2. 配置和脚本问题:

    • 确认启动命令(CMDENTRYPOINT)在交互命令行环境下运行无误。
    • 检查配置文件的路径和权限,有时由于路径不正确或权限不足导致程序无法正确读取配置。
  3. 调试和进入失败容器环境:

    • 可以通过调整 Dockerfile 或启动命令(例如在启动命令前附加 sleep)来使容器处于短暂的运行状态以便调试:
      CMD ["sh", "-c", "sleep 30; your_start_command"]
      
    • 使用 docker exec -it <container_id> /bin/bash(或 /bin/sh)进入已启动的容器进行实时调试和检查。

验证和修复

  1. 验证 Dockerfile 和 Docker Compose 配置:

    • 检查 Dockerfiledocker-compose.yml 中的版本号、语法是否正确以及相关服务是否正常连接。
    • 确保所有依赖环境变量都已被正确设置。
  2. 基础镜像和应用依赖:

    • 确认应用在基础镜像中所有必须的库和二进制依赖都已安装。
    • 检查基础镜像是否更新到重大版本使得旧的功能丧失。
  3. 基础设施和环境问题:

    • 强大的但不被使用者感知的因素如系统资源限制可能会导致应用容器无法启动。例如,使用 docker stats 查看可用资源分配,确保内存和 CPU 分配充足。
    • 检查宿主环境是否存在潜在问题,网络配置错误、磁盘空间不足等。

深入探索和预防措施

  1. 使用详细模式和调试工具:

    • 启用调试模式(如果应用程序支持),输出更详细的应用程序内部信息。
    • 可以使用诸如 stracegdb 等工具对应用进行深层次的调试分析。
  2. 构建和测试管道:

    • 构建合理的软件测试和构建流水线,集成docker镜像构建与测试,提前捕获潜在问题。
    • 使用 CI 环境进行完整的构建与测试循环以模拟生产环境,增加稳定性。
  3. 容错和自我恢复机制:

    • 如果应用需求允许,通过健康检查 (HEALTHCHECK) 和重启策略 (restart: always) 来增强容器的健壮性。
    • 设置合适的重试与监控策略以识别和处理长时间未被发现的失败。

通过逐步诊断、验证,结合多种技巧,能够大大提高调试效率,有效解决容器启动问题,并在未来避免类似问题重现。Docker 提供了丰富的调试和管理工具,结合充分的编码实践,容器化应用将更加可靠稳固。

网络问题排查

在使用 Docker 时,网络问题可能导致容器之间、容器与外部网络之间无法正常通信。以下是常见的问题描述及解决方案:

问题描述
  1. 容器之间无法通信:两个或多个容器无法互访或者共享服务。
  2. 无法访问外部网络:容器无法通过网络访问外部资源或服务,如无法访问互联网。
解决方案
  1. 网络模式检查

    • Docker 提供多种网络模式:bridge、host、none、container、自定义网络等。
    • 使用桥接网络模式时,确保所有需要互相通信的容器位于同一网络下。
    • 使用以下命令检查 Docker 网络:
      docker network ls
      
    • 使用以下命令查看具体容器所属的网络:
      docker inspect <container_id> | grep "Networks"
      
  2. 端口映射配置

    • 确保容器的端口正确映射到主机端口,以便从外部访问容器服务。使用 -p 参数进行端口映射:
      docker run -d -p 8080:80 myapp
      
    • 使用 docker ps 确认端口映射:
      docker ps
      
  3. DNS设置

    • 确保容器内有正确的 DNS 设置,尤其是需要访问外部网络资源的容器。
    • 可以在容器内部使用 pingnslookup 等工具测试 DNS 解析:
      docker exec -it <container_id> ping www.google.com
      
    • 检查 Docker 的默认 DNS 设置,并根据需要调整 /etc/docker/daemon.json 文件:
      {"dns": ["8.8.8.8", "8.8.4.4"]
      }
      
    • 通过 systemctl restart docker 重启 Docker 服务以应用更改。
  4. 自定义网络设置

    • 创建自定义网络以提高容器之间的隔离和灵活性:
      docker network create my_custom_network
      
    • 在运行容器时,将容器附加到自定义网络:
      docker run -d --network=my_custom_network --name=webserver nginx
      
    • 确保容器在同一自定义网络中,以实现自动的 DNS 解析和更好的通信。
  5. 检查防火墙和安全组

    • 如果在云环境中运行 Docker,检查安全组或防火墙设置是否允许相关端口的流量。
    • 确保 Docker 主机和容器之间的网络策略允许所需的流量。
  6. 查看网络日志与捕获包

    • 使用 docker logs <container_id> 查看应用日志。
    • 使用网络抓包工具 tcpdumpwireshark 对可疑流量进行分析。
实践示例

假设两个容器 app1app2 需要通过一个定制的网络彼此通信但无法正常连接,步骤如下:

  1. 创建自定义网络:

    docker network create my_app_network
    
  2. 启动容器并连接至网络:

    docker run -d --name=app1 --network=my_app_network myapp:latest
    docker run -d --name=app2 --network=my_app_network myapp:latest
    
  3. 测试容器之间的通信:

    docker exec -it app1 ping app2
    

通过掌握并应用以上步骤和方式,能够有效排查并解决 Docker 容器网络配置中的常见问题,保证容器之间和容器与外部网络的正常通信。

存储卷相关问题

在使用 Docker 的过程中,管理和持久化数据是关键的一环,以下是关于存储卷常见问题的解析及解决方案:

问题描述
  1. 数据卷无法挂载:

    • 容器启动时,指定的数据卷未成功连接到主机路径或未在容器中显示。
  2. 数据无法持久化:

    • 容器的重新启动或删除导致数据丢失。
解决方案
  1. 检查挂载路径:

    • 主机和容器路径匹配:在使用 -v 参数时,确保主机路径和容器路径是正确的形式。典型命令为:
      docker run -v /path/on/host:/path/in/container image_name
      
  2. 权限设置:

    • 主机目录权限:主机上用于挂载的目录需要具有适当的读写权限。可以使用 chmod 命令设置正确的权限。
    • 容器内用户权限:很多时候,Docker 容器内部的进程可能以特定用户权限运行,确保这些进程对相应目录有访问权限。
    • 实践建议:运行容器时以特定用户身份启动 --user,并调整主机目录和容器运行用户的权限。
  3. 卷的持久化策略:

    • 使用 Docker 数据卷(Volume):相比 Bind Mount,更适合用于持久化和共享数据。
      docker volume create my_volume
      docker run -v my_volume:/path/in/container image_name
      
    • 数据隔离与安全:数据卷由 Docker 管理,更适合用于动态路径、不依赖主机文件结构的操作。
  4. 验证卷挂载是否成功:

    • 使用命令 docker volume lsdocker inspect <container_id> 去检查卷是否按预期挂载。
    • 在容器内使用 lscat 命令来确认挂载的文件或目录是否可见并正确同步。
  5. 日志与错误定位:

    • 查看 Docker 日志 docker logs <container_id>syslog 以识别挂载失败的具体原因。
    • 常用 docker inspect 结合 JSON 格式数据检查特定挂载配置。
  6. 避免使用过期的 Bind Mount:

    • 同样重要的是关注主机路径配置的持久有效性,避免引用修改频繁的临时路径。
实践应用
  • 场景举例
    • 开发环境与生产环境一致性:通过 Volume 提供开发与生产一致的数据持久化架构。
    • 数据库持久化:为 MySQL 或 PostgreSQL 实例配置专用 Volume,确保重启和升级后的数据完整性。

利用 Docker 的存储卷机制,我们可以在确保数据持久化的前提下,实现容器数据与主机数据的灵活交换和共享,提高应用的可靠性和可运维性。这不仅有助于保持数据完整性,还提升了运维管理效率。

性能与资源瓶颈分析

容器化应用在某些场景下可能会遇到性能瓶颈或资源耗尽的问题,这通常是由于未能合理分配和管理计算资源(CPU、内存等)或应用程序自身存在效率问题引起的。以下是一些具体的诊断和解决方案。

问题描述
  • 容器性能差
    • 容器响应缓慢。
    • 应用程序卡顿,处理能力不足。
  • 系统资源耗尽
    • 主机整体CPU使用率高。
    • 内存不足导致应用崩溃。
解决方案
  1. 资源限制

    • 配置 CPU 限制
      • 使用 --cpus 参数来限制每个容器可以使用的 CPU 数量。例如,--cpus="1.5" 表示容器最多使用一个半 CPU 资源。
      docker run --cpus="1.5" your_image
      
    • 配置内存限制
      • 使用 --memory 选项限制内存使用的最大值,如果超过限制,容器可能被杀掉以释放内存。
      docker run --memory="512m" your_image
      
  2. 性能监控

    • 实时监控:
      • 使用 docker stats 命令实时查看容器的资源使用情况(包括 CPU、内存、网络等),帮助识别哪个容器可能是瓶颈所在。
      docker stats
      
    • 长期监控:
      • 集成容器监控工具,如 Prometheus 与 Grafana,提供更详细的历史数据和丰富的图表分析。
  3. 应用优化

    • 代码优化:
      • 检查应用程序的算法效率,尤其是涉及大量计算或数据处理的部分。
      • 使用性能分析工具(如 Profilers)找出代码中耗时最长的部分进行优化。
    • 配置优化:
      • 调整应用程序的配置参数(如 JVM 的 GC 调整、数据库连接池大小等),使之更加适合容器化运行场景。
    • 分片与负载分担
      • 将应用分成更小的微服务,并使用服务编排工具(例如 Kubernetes 或 Docker Swarm)进行负载分担以提高性能。
  4. 系统优化

    • 内核参数调整
      • 修改 Docker 主机的 Linux 内核参数(如最大打开文件数、网络连接等)以处理更多请求。
    • 存储优化
      • 使用更快速或更适合的存储选项(如 SSD 或持久化卷)来加速 IO 操作。
  5. 使用多阶段构建减小镜像体积

    • 减小镜像体积可以提高传输效率和启动速度,避免不必要的资源占用和下载时间。这可以通过 Dockerfile 的多阶段构建来实现。
  6. 定期审核和调整

    • 定期评估和更新容器资源配置整体现状,并根据应用需求调整策略,确保资源利用率的最佳化。

整合以上方法,持续提升容器化应用的性能是一个动态的过程,需要结合具体的应用特性和业务需求不断调整和优化。通过合理的资源分配、监控和持续优化,可以有效处理容器性能差或系统资源耗尽的问题。

7. 总结与资源

总结和回顾

通过本教程的学习,您了解了Docker基本操作、容器管理、网络配置、数据存储以及调试的常用技巧等。本教程不仅为理解Docker及相关技术提供了实用信息,也为实际项目中如何应用提供了详细指导。

参考资源

为了加深对 Docker 的理解和掌握不同场景下的最佳实践,以下这些资源可以帮助你:

官方文档与社区资源
  1. Docker 官方文档:
    • Docker Documentation: 官方起步指南、CLI 参考、API 文档等,为掌握 Docker 提供权威内容。
    • Docker 的 官方 GitHub 仓库: 及时了解项目更新和社区贡献。

附录

Docker 命令速查表

下面是一些日常使用 Docker 时常用的命令和操作,涵盖了容器管理、镜像管理、网络设置、数据卷管理等方面,以帮助快速查找并使用。

容器管理
  • 启动容器

    • docker run [options] image_name
    • 常用选项:
      • -d:以后台方式运行容器。
      • -p:端口映射,例如 -p 8080:80
      • -v:挂载数据卷,示例:-v /host/path:/container/path
      • --name:为容器指定一个名称。
  • 查看运行中容器

    • docker ps
    • docker ps -a:查看所有容器(包括已停止的)。
  • 停止/启动/重启容器

    • docker stop [container_id/容器名]
    • docker start [container_id/容器名]
    • docker restart [container_id/容器名]
  • 查看容器日志

    • docker logs [container_id/容器名]
    • 带选项:
      • -f:实时跟随日志输出。
      • --tail:查看末尾几行日志,例如 --tail 10
  • 进入运行中的容器

    • docker exec -it [container_id/容器名] bash
    • docker attach [container_id/容器名]
  • 删除容器

    • docker rm [container_id/容器名]
镜像管理
  • 拉取镜像

    • docker pull [image_name:tag]
  • 列出镜像

    • docker images
  • 删除镜像

    • docker rmi [image_name:tag]
网络管理
  • 创建网络

    • docker network create [network_name]
  • 列出网络

    • docker network ls
  • 删除网络

    • docker network rm [network_name]
  • 连接容器到网络

    • docker network connect [network_name] [container_id/容器名]
数据卷管理
  • 创建数据卷

    • docker volume create [volume_name]
  • 列出数据卷

    • docker volume ls
  • 删除数据卷

    • docker volume rm [volume_name]
  • 查看数据卷详细信息

    • docker volume inspect [volume_name]
其他常用命令
  • 查看 Docker 版本

    • docker version
  • 查看 Docker 系统信息

    • docker info
  • 监控容器资源使用

    • docker stats
使用建议
  1. 命名容器和镜像:在运行和管理过程中为容器和镜像指定易于理解的名称,以便于维护和管理。
  2. 实践良好的日志管理:通过 docker logs 结合 -f--tail 选项实时监控和查看日志,以便于快速诊断问题。

这个命令速查表旨在提供便捷的参考,使你能更高效地进行 Docker 操作和管理任务。随着使用 Docker 的深入,掌握这些基本命令将大大提升工作效率和部署能力。

常见错误码解释

在使用 Docker 时,了解常见错误码可以帮助快速识别和解决问题。下面是一些常见的错误码及其解释:

  • Error 125: 命令执行失败

    • 描述: 当尝试运行一个 Docker 命令,但由于命令本身的问题而无法执行时,会返回 125 错误码。
    • 常见原因:
      • 提供的选项或参数不正确。
      • Docker 守护进程没有启动。
    • 解决方案:
      • 检查命令语法和参数。
      • 验证 Docker 守护进程是否正在运行。
  • Error 126: 命令不可执行

    • 描述: 该错误表示 Docker 容器中指定的命令无法被执行,因为它不是可执行文件。
    • 常见原因:
      • 缺少可执行权限。
      • 执行的文件不是有效的可执行文件。
    • 解决方案:
      • 使用 chmod +x 为脚本或可执行文件添加执行权限。
      • 确保提供的是正确的可执行路径或文件名。
  • Error 127: 找不到命令

    • 描述: 在容器中执行命令时,系统找不到指定的命令。
    • 常见原因:
      • 命令在系统路径中不可用。
      • Dockerfile 中路径配置有误,导致 PATH 中找不到目标命令。
    • 解决方案:
      • 确保在构建镜像时安装了所需的命令。
      • 在 Dockerfile 中添加命令到 PATH 或直接使用全路径。
其他常见错误码
  • Error 137: 容器因内存不足被杀死

    • 描述: 容器由于内存限制被系统的 OOM(Out Of Memory)守护进程强制终止。
    • 处理方法:
      • 增加分配给容器的内存。
      • 优化应用程序,减少内存消耗。
  • Error 139: 段错误(Segmentation Fault)

    • 描述: 应用程序因非法内存访问而崩溃。
    • 处理方法:
      • 检查代码或应用程序日志定位问题根源。
      • 确保库和可执行文件没有兼容性问题。
  • Error 255: 通常是由于脚本中未被捕获的异常

    • 描述: 通常来自于脚本中的错误未处理,导致返回 255。
    • 处理方法:
      • 在脚本中添加适当的错误捕获。
      • 查看日志以更详细地分析问题。
排查问题的一般步骤
  1. 查阅日志: 查看 docker logs 输出和容器中应用的日志文档,以获取详细的错误信息。

  2. 命令检查: 使用 docker inspect 确认容器配置,例如挂载路径、环境变量是否按预期设置。

  3. 资源检查: 使用 docker stats 确定容器是否因内存、CPU、IO 资源等不足导致崩溃。

  4. 测试命令: 在容器内部手动测试有问题的命令,确认其行为。可使用 docker exec 进入容器交互式测试命令。

理解这些错误码及其对应的解决方法,有助于在使用 Docker 的实践中快速解决问题,提高效率。

Docker 和相关工具的配置示例文件

配置文件对于容器管理、编排以及服务的定义非常重要。这里以 docker-compose.yml 文件为例,介绍如何定义和配置一个多容器应用程序。

示例配置:docker-compose.yml
version: '3.8' # Version of Docker Compose file format, regularly updated to include new featuresservices: # Define all the services, each running in its own containerweb:image: nginx:alpine # Use the NGINX image with Alpine Linux for a lightweight web serverports: - "8080:80" # Map host port 8080 to container port 80volumes:- ./data:/usr/share/nginx/html # Mount local directory to container directory for serving filesnetworks:- webnet # Connect the container to the 'webnet' networkenvironment:- NGINX_HOST=example.com # Example environment variables- NGINX_PORT=80api:image: myapi:latest # Example API servicebuild:context: ./api # Build API service from Dockerfile located in ./api directoryports:- "3000:3000"depends_on:- dbnetworks:- webnetenvironment:- NODE_ENV=production- DB_HOST=db- DB_PORT=5432db:image: postgres:13 # PostgreSQL database service with a specific tagvolumes:- db_data:/var/lib/postgresql/data # Named volume to persist database datanetworks:- webnetenvironment:- POSTGRES_DB=mydatabase- POSTGRES_USER=myuser- POSTGRES_PASSWORD=mypasswordnetworks:webnet: # Custom bridge network ensuring container communicationdriver: bridgevolumes:db_data: # Named volume for database persistence
配置文件关键要素解析
  1. 版本声明 (version):

    • 确保配置文件能够匹配特定版本的 Docker Compose 特性。
    • 向前兼容性和新特性可能会依赖于版本号。
  2. 服务定义 (services):

    • 每个服务代表一个可独立启动的容器,例如 web 服务器、API、数据库。
  3. 镜像 (image)构建 (build):

    • image: 指定使用哪个已有镜像。
    • build: 当需要从源码构建镜像时使用。指定 contextDockerfile 等信息。
  4. 端口映射 (ports):

    • 将宿主机端口和容器端口绑定,以开放服务至外部网络。
    • 格式为 "host_port:container_port"
  5. 挂载卷 (volumes):

    • 实现数据持久化和主机与容器间的数据共享。
    • 可使用路径或命名卷,以持久化不同服务的数据。
  6. 网络 (networks):

    • 定义和使用自定义网络,让各个服务所属容器可操作性良好地进行交互。
    • driver 指定使用何种类型网络,如 bridge、overlay。
  7. 环境变量 (environment):

    • 配置运行时容器的环境变量,用于条件配置或安全性保障。
    • 可通过变更环境变量来改变服务的行为而不改变镜像。
  8. 依赖和启动顺序 (depends_on):

    • 定义服务间的启动顺序和依赖关系。
    • 需要注意启动顺序并不完全等于服务就绪顺序,应使用适当的健康检查。
其他常用配置文件示例
  1. Dockerfile

    • 上文已详细介绍,作为特定容器的定义入口。
  2. .env 文件

    DB_PASSWORD=mypassword
    API_SECRET_KEY=mysecretkey
    
    • 存储环境变量,例如认证密钥、数据库密码,配合 docker-compose.yml 使用。
  3. docker-compose.override.yml

    • 用以覆盖或扩展默认的 Compose 配置。例如在开发环境下增加调试工具或日志服务。

通过结合标准 Docker 配置文件及其合理应用,可以构建稳定、易维护、可扩展的多容器应用架构,既满足本地开发环境的快速搭建,又可支持复杂的生产部署场景。

相关文章:

【Docker从入门到进阶】06.常见问题与解决方案 07.总结与资源

6. 常见问题与解决方案 在使用Docker进行开发和部署过程中&#xff0c;可能会遇到各种问题。以下是一些常见问题及其解决方案&#xff1a; 容器启动失败和调试 在使用 Docker 时&#xff0c;容器启动失败或立即退出可能会导致一定的困扰&#xff0c;以下是进一步深入解决该问…...

快速排序的非递归实现:借助栈实现、借助队列实现

目录 用栈实现快速排序 1.用栈实现非递归快速排序的思路步骤 1.1.思路步骤 2.用栈实现非递归快速排序的代码 3.用栈实现非递归快速排序的整个工程 3.1.QuickSortNonR.h 3.2.QuickSortNonR.c 3.3.Stack.h 3.4.Stack.c 用队列实现非递归快速排序 1.用队列实现非递归快…...

Finops成本优化企业实践-可视化篇

引言&#xff1a;上一章讨论了finops的一些方法论&#xff0c;笔者在拿到finops官方认证finops-engineer certificate之后&#xff0c;将方法论运用到所在项目组中&#xff0c;并于今年完成了40%的费用节省。在此将这些实践方法总结沉淀&#xff0c;与大家分享。实践包括三篇&a…...

Spring Boot中线程池使用

说明&#xff1a;在一些场景&#xff0c;如导入数据&#xff0c;批量插入数据库&#xff0c;使用常规方法&#xff0c;需要等待较长时间&#xff0c;而使用线程池可以提高效率。本文介绍如何在Spring Boot中使用线程池来批量插入数据。 搭建环境 首先&#xff0c;创建一个Spr…...

Python机器学习:自然语言处理、计算机视觉与强化学习

&#x1f4d8; Python机器学习&#xff1a;自然语言处理、计算机视觉与强化学习 目录 ✨ 自然语言处理&#xff08;NLP&#xff09; 文本预处理&#xff1a;分词、去停用词词向量与文本分类&#xff1a;使用Word2Vec与BERT &#x1f306; 计算机视觉基础 图像预处理与增强目标…...

Vue2 + ElementUI + axios + VueRouter入门

之前没有pc端开发基础&#xff0c;工作需要使用若依框架进行了一年的前端开发.最近看到一个视频框架一步步集成&#xff0c;感觉颇受启发&#xff0c;在此记录一下学习心得。视频链接:vue2element ui 快速入门 环境搭建和依赖安装 安装nodejs安装Vue Cli使用vue create proje…...

GO网络编程(四):海量用户通信系统2:登录功能核心【重难点】

目录 一、C/S详细通信流程图二、消息类型定义与json标签1. 消息类型定义2. JSON标签3.结构体示例及其 JSON 表示&#xff1a;4.完整代码与使用说明 三、客户端发送消息1. 连接到服务器2. 准备发送消息3. 创建 LoginMes 并序列化4. 将序列化后的数据嵌入消息结构5. 序列化整个 M…...

某项目实战分析代码二

某项目实战分析代码二 此次分析的是protobuf的使用操作流程具体实现 3. 业务数据分析3.1 客户端3.2 服务器端简单案例 此次分析的是protobuf的使用 Protocol Buffer( 简称 Protobuf) 是Google公司内部的混合语言数据标准&#xff0c;它是一种轻便高效的结构化数据存储格式&…...

全面指南:探索并实施解决Windows系统中“mfc140u.dll丢失”的解决方法

当你的电脑出现mfc140u.dll丢失的问题是什么情况呢&#xff1f;mfc140u.dll文件依赖了什么&#xff1f;mfc140u.dll丢失会导致电脑出现什么情况&#xff1f;今天这篇文章就和大家聊聊mfc140u.dll丢失的解决办法。希望能够有效的帮助你解决这问题。 哪些程序依赖mfc140u.dll文件…...

QT学习笔记1(QT和QT creator介绍)

QT学习笔记1&#xff08;QT和QT creator介绍&#xff09; Qt 是一个跨平台的应用开发框架&#xff0c;主要用于图形用户界面&#xff08;GUI&#xff09;应用的开发&#xff0c;但也支持非GUI程序的开发。Qt 支持多种平台&#xff0c;如Windows、macOS、Linux、iOS和Android&a…...

存储电话号码的数据类型,用 int 还是用 string?

在 Java 编程中&#xff0c;存储电话号码的选择可以通过两种常见方式进行&#xff1a;使用 int 类型或 String 类型。这种选择看似简单&#xff0c;但实际上涉及到 JVM 内部的字节码实现、内存优化、数据表示、以及潜在的可扩展性问题。 Java 基本数据类型与引用数据类型的差异…...

【目标检测】工程机械车辆数据集2690张4类VOC+YOLO格式

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2694 标注数量(xml文件个数)&#xff1a;2694 标注数量(txt文件个数)&#xff1a;2694 标注…...

target_link_libraries()

target_link_libraries() 是 CMake 中的一个命令&#xff0c;用于指定目标&#xff08;如可执行文件或库&#xff09;所依赖的其他库。其主要作用包括&#xff1a; 链接库&#xff1a;将指定的库链接到目标上&#xff0c;使目标能够调用这些库中的函数和使用其功能。 管理依赖…...

Javascript数组研究09_Array.prototype[Symbol.unscopables]

Symbol.unscopables 是 JavaScript 中一个相对较新的符号&#xff08;Symbol&#xff09;&#xff0c;用于控制对象属性在 with 语句中的可见性。它主要用于内置对象&#xff0c;如 Array.prototype&#xff0c;以防止某些方法被引入到 with 语句的作用域中&#xff0c;避免潜在…...

SkyWalking 自定义链路追踪

对项目中的业务方法&#xff0c;实现链路追踪&#xff0c;方便我们排查问题 引入依赖 <!‐‐ SkyWalking 工具类 ‐‐> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm‐toolkit‐trace</artifactId> <vers…...

Linux驱动开发(速记版)--设备模型

第八十章 设备模型基本框架-kobject 和 kset 80.1 什么是设备模型 设备模型使Linux内核处理复杂设备更高效。 字符设备驱动适用于简单设备&#xff0c;但对于电源管理和热插拔&#xff0c;不够灵活。 设备模型允许开发人员以高级方式描述硬件及关系&#xff0c;提供API处理设备…...

动手学深度学习(李沐)PyTorch 第 6 章 卷积神经网络

李宏毅-卷积神经网络CNN 如果使用全连接层&#xff1a;第一层的weight就有3*10^7个 观察 1&#xff1a;检测模式不需要整张图像 很多重要的pattern只要看小范围即可 简化1&#xff1a;感受野 根据观察1 可以做第1个简化&#xff0c;卷积神经网络会设定一个区域&#xff0c…...

新编英语语法教程

新编英语语法教程 1. 新编英语语法教程 (第 6 版) 学生用书1.1. 目录1.2. 电子课件 References A New English Grammar Coursebook 新编英语语法教程 (第 6 版) 学生用书新编英语语法教程 (第 6 版) 教师用书 1. 新编英语语法教程 (第 6 版) 学生用书 https://erp.sflep.cn/…...

Golang 服务器虚拟化应用案例

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

Elasticsearch基础_4.ES搜索功能

文章目录 一、搜索辅助功能1.1、指定返回的字段1.2、结果计数1.3、结果分页 二、搜索匹配功能2.1、查询所有文档2.2、term级别查询2.2.1、term查询2.2.2、terms查询2.2.3、range查询2.2.4、exists查询 2.3、布尔查询2.3.1、must&#xff0c;should&#xff0c;must_not2.3.2、f…...

Elasticsearch要点简记

Elasticsearch要点简记 1、ES概述2、基础概念&#xff08;1&#xff09;索引、文档、字段&#xff08;2&#xff09;映射&#xff08;3&#xff09;DSL 3、架构原理4、索引字段的数据类型5、ES的三种分页方式&#xff08;1&#xff09;深度分页&#xff08;fromsize&#xff09…...

【通信协议】IIC通信协议详解

IIC&#xff08;Inter-Integrated Circuit&#xff09;通信协议&#xff0c;又称为I2C&#xff08;Inter-Integrated Circuit 2&#xff09;协议&#xff0c;是一种广泛使用的串行通信协议。它由Philips Semiconductor&#xff08;现NXP Semiconductors&#xff09;开发&#x…...

2024年中国科技核心期刊目录(社会科学卷)

2024年中国科技核心期刊目录 &#xff08;社会科学卷&#xff09; 序号 期刊代码 期刊名称 1 SC02 JOURNAL OF S…...

用Python集成免费IP归属地查询API

IP查询的优势是什么&#xff1f; IP查询是一种强大的工具&#xff0c;能够快速提供关于IP地址的信息&#xff0c;如地理位置、互联网服务提供商&#xff08;ISP&#xff09;、连接类型等。这些数据在多种场景下都非常有用&#xff0c;帮助用户理解网络环境和用户行为。 首先&…...

C 数组

C 数组 数组是C语言中的一种基本数据结构&#xff0c;用于存储一系列相同类型的数据。它是连续的内存分配&#xff0c;允许通过索引快速访问元素。本文将详细介绍C数组的概念、使用方法、以及注意事项。 1. 数组的概念 数组是一个集合&#xff0c;可以存储一定数量的元素。在…...

【Unity】unity安卓打包参数(个人复习向/有不足之处欢迎指出/侵删)

1.Texture Compression 纹理压缩 设置发布后的纹理压缩格式 Use Player Settings:使用在播放器设置中设置的纹理压缩格式 ETC&#xff1a;使用ETC格式&#xff08;兼容&#xff09; ETC2&#xff1a;使用ETC2格式&#xff08;很多设备不支持&#xff09; ASTC&#xff1a;使用…...

C0016.Clion中qDebug()打印输出中文时,都是问号??????的解决办法

问题描述 在clion中使用qDebug打印输出中文内容时&#xff0c;都是&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;如下图&#xff1a; 注意&#xff1a;修改该文件的编码格式就行&#xff0c;该文件名为apr.cpp&#xff1b; 解决办法...

C++ priority_queue 优先队列构造大根堆和小根堆

priority_queue的三个参数 template <class T, class Container std::vector<T>, class Compare std::less<typename Container::value_type>> class priority_queue;1、元素类型 2、底层容器类型&#xff0c;默认vector 3、比较函数&#xff08;传入的是…...

音视频入门基础:FLV专题(9)——Script Tag简介

一、SCRIPTDATA 根据《video_file_format_spec_v10_1.pdf》第75页到76页&#xff0c;如果某个Tag的Tag header中的TagType值为18&#xff0c;表示该Tag为Script Tag&#xff08;脚本Tag&#xff0c;又称Data Tag、SCRIPTDATA tag&#xff09;。这时如果Filter的值不为1表示未加…...

Vue页面,基础配置

最简单页面 日期范围及字符搜索&#xff0c;监听器处理日期范围搜索控件清空重置问题导出、导出文件文件名称带日期时间表格日期指定格式显示。。。 <template><div class"app-container"><el-form :model"queryParams" ref"queryForm…...