containerd的客户端工具ctr命令

containerd的客户端工具ctr命令

类似docker为docker-shim容器运行时的客户端工具,ctr 是 containerd 的客户端工具,安装containerd作为容器运行时后,会自动安装ctr。

root@master1:~# ctr -v
ctr github.com/containerd/containerd 1.7.12

1. 帮助文档

ctr帮助文档

root@master1:~# ctr --helpcontainerd CLIUSAGE:ctr [global options] command [command options] [arguments...]VERSION:1.7.12DESCRIPTION:ctr is an unsupported debug and administrative client for interacting
with the containerd daemon. Because it is unsupported, the commands,
options, and operations are not guaranteed to be backward compatible or
stable from release to release of the containerd project.COMMANDS:plugins, plugin            Provides information about containerd pluginsversion                    Print the client and server versionscontainers, c, container   Manage containerscontent                    Manage contentevents, event              Display containerd eventsimages, image, i           Manage imagesleases                     Manage leasesnamespaces, namespace, ns  Manage namespacespprof                      Provide golang pprof outputs for containerdrun                        Run a containersnapshots, snapshot        Manage snapshotstasks, t, task             Manage tasksinstall                    Install a new packageoci                        OCI toolssandboxes, sandbox, sb, s  Manage sandboxesinfo                       Print the server infodeprecationsshim                       Interact with a shim directlyhelp, h                    Shows a list of commands or help for one commandGLOBAL OPTIONS:--debug                      Enable debug output in logs--address value, -a value    Address for containerd's GRPC server (default: "/run/containerd/containerd.sock") [$CONTAINERD_ADDRESS]--timeout value              Total timeout for ctr commands (default: 0s)--connect-timeout value      Timeout for connecting to containerd (default: 0s)--namespace value, -n value  Namespace to use with commands (default: "default") [$CONTAINERD_NAMESPACE]--help, -h                   show help--version, -v                print the version

注意:

ctr与docker较大的一个区别再用ctr有命名空间的概念,下面的命令执行时候如果没加-n参数,表示default命名空间。当containerd结合k8s使用时,相关镜像一般存放到k8s.io,相关操作需要加-n k8s.io,且将参数放到最前面。

子命令帮助文档,通过ctr+子命令查看帮助信息:

root@master1:~# ctr plugins
NAME:ctr plugins - Provides information about containerd pluginsUSAGE:ctr plugins command [command options] [arguments...]COMMANDS:list, ls  Lists containerd pluginsOPTIONS:--help, -h  show help

2. 镜像操作

帮助信息:

root@master1:~# ctr images
NAME:ctr images - Manage imagesUSAGE:ctr images command [command options] [arguments...]COMMANDS:check                    Check existing images to ensure all content is available locallyexport                   Export imagesimport                   Import imageslist, ls                 List images known to containerdmount                    Mount an image to a target pathunmount                  Unmount the image from the targetpull                     Pull an image from a remotepush                     Push an image to a remoteprune                    Remove unused imagesdelete, del, remove, rm  Remove one or more images by referencetag                      Tag an imagelabel                    Set and clear labels for an imageconvert                  Convert an imageusage                    Display usage of snapshots for a given image refOPTIONS:--help, -h  show help

拉取镜像:

# 帮助信息
[root@k8s ~]# ctr images pull --help
NAME:ctr images pull - pull an image from a remoteUSAGE:ctr images pull [command options] [flags] <ref>DESCRIPTION:Fetch and prepare an image for use in containerd.After pulling an image, it should be ready to use the same reference in a run
command. As part of this process, we do the following:1. Fetch all resources into containerd.
2. Prepare the snapshot filesystem with the pulled resources.
3. Register metadata for the image.OPTIONS:--skip-verify, -k                 skip SSL certificate validation--plain-http                      allow connections using plain HTTP--user value, -u value            user[:password] Registry user and password--refresh value                   refresh token for authorization server--hosts-dir value                 Custom hosts configuration directory--tlscacert value                 path to TLS root CA--tlscert value                   path to TLS client certificate--tlskey value                    path to TLS client key--http-dump                       dump all HTTP request/responses when interacting with container registry--http-trace                      enable HTTP tracing for registry interactions--snapshotter value               snapshotter name. Empty value stands for the default value. [$CONTAINERD_SNAPSHOTTER]--label value                     labels to attach to the image--platform value                  Pull content from a specific platform--all-platforms                   pull content and metadata from all platforms--all-metadata                    Pull metadata for all platforms--print-chainid                   Print the resulting image's chain ID--max-concurrent-downloads value  Set the max concurrent downloads for each pull (default: 0)# 拉取nginx镜像,注意与docker拉取镜像不同,镜像名不能简写。
[root@k8s ~]# ctr i pull docker.io/library/nginx:latest
docker.io/library/nginx:latest:                                                   resolved       |++++++++++++++++++++++++++++++++++++++|
index-sha256:9c367186df9a6b18c6735357b8eb7f407347e84aea09beb184961cb83543d46e:    done           |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:4e02e85a6f060a8406978fa53aafd2d828d0cedf5259275d191bab9afc33249e: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:a06b6fd631e8e2091ce18db1a1b063f14f06a63d0513cafc51500ce7cb1ae2f4:    done           |++++++++++++++++++++++++++++++++++++++|
config-sha256:e0c9858e10ed8be697dc2809db78c57357ffc82de88c69a3dee5d148354679ef:   done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:2cc3ae149d28a36d28d4eefbae70aaa14a0c9eab588c3790f7979f310b893c44:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:1018f2b8dba8ffec0afc981d5bae673e38ecac6ca29a861d12cccbd820d53f8d:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:b831e78d8e20641c11c527baff6e2c7bae6a43cc1ab4316a5532885d6461b1e7:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:3ab22521e91957c19caeb12eadcad2823fdca853477acb38cd5e9a1ebe57e96e:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:5112bf42775bbb6a896ccd3ad63cbf864976fb1c047a4c56f316cf78d3edd756:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:cbdaf9e4ee2d8507bf2e162c560cfb0b37567db3870235b8940aeb157d628327:    done           |++++++++++++++++++++++++++++++++++++++|
elapsed: 17.1s                                                                    total:  67.7 M (4.0 MiB/s)                                 
unpacking linux/amd64 sha256:9c367186df9a6b18c6735357b8eb7f407347e84aea09beb184961cb83543d46e...
done: 1.164220475s

备注:

测试发现ctr拉取镜像如果要配置代理的话,走的是linux全局代理配置方式,而不是docker或者containerd单独的代理配置方式。参考方式:

export proxy=http://192.168.0.210:808
export all_proxy=$proxy
export http_proxy=$proxy
export https_proxy=$proxy
export no_proxy="localhost, 127.0.0.1, ::1"

打印镜像列表:

# ctr images ls 等同于 ctr -n default images ls;同时images可以简写为image或i
root@master1:~# ctr images ls
REF     TYPE          DIGEST                    SIZE      PLATFORMS             LABELS
docker.io/library/redis:6.0.5                                        application/vnd.docker.distribution.manifest.list.v2+json sha256:800f2587bf3376cb01e6307afe599ddce9439deafbd4fb8562829da96085c9c5 36.4 MiB  linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x -  -
# -q,只打印镜像名称
root@master1:~# ctr images ls -q
docker.io/library/redis:6.0.5

检测本地镜像:

# 检查本地镜像的完整性
root@master1:~# ctr images check
...
root@master1:~# ctr -n k8s.io images check
...

镜像重新打标签:

root@master1:~# ctr i tag docker.io/library/redis:6.0.5 docker.io/lldhsds/redis:6.0.5
docker.io/lldhsds/redis:6.0.5root@master1:~# ctr i ls -q
docker.io/library/redis:6.0.5
docker.io/lldhsds/redis:6.0.5

删除镜像:

root@master1:~# ctr i rm docker.io/lldhsds/redis:6.0.5
docker.io/lldhsds/redis:6.0.5

将镜像导出为压缩包:

# 指定命名空间,指定--platform参数
root@worker1:~# ctr -n k8s.io image export --platform=linux/amd64 guestbook.tar docker.io/library/redis:6.0.5
root@worker1:~# ls
guestbook.tar  guestbook.tar.gz

从压缩包导入镜像:

# 导入到default命名空间下
root@master1:~# ctr image import --platform=linux/amd64 guestbook.tar
unpacking docker.io/library/redis:6.0.5 (sha256:800f2587bf3376cb01e6307afe599ddce9439deafbd4fb8562829da96085c9c5)...done
# 导入到k8s.io命名空间下
root@master1:~# ctr -n k8s.io image import --platform=linux/amd64 guestbook.tar
unpacking docker.io/library/redis:6.0.5 (sha256:800f2587bf3376cb01e6307afe599ddce9439deafbd4fb8562829da96085c9c5)...done

备注:

  1. 使用ctr导出、导入镜像时一般都需要加上--platform=linux/amd64参数(x86-64架构),否则会出现类似问题ctr: content digest sha256:a630f3b108d2562d7a6747a0d3b5181b8f5a9aa489b8915fccd04de94cdc96bf: not found
  2. 如果是从docker侧打包的镜像,使用ctr打包,测试可以不加--platform=linux/amd64参数

将镜像挂载到主机目录:

root@worker1:~# ctr i mount docker.io/library/redis:6.0.5 /mnt
ctr: image "docker.io/library/redis:6.0.5": not found
root@worker1:~# ctr -n k8s.io i mount docker.io/library/redis:6.0.5 /mnt
sha256:852691351e76013456bccc5ca476ea5998cd4ef829ff88f36aa6152d26752a9f
/mnt
root@worker1:~# ls /mnt -alh
total 88K
drwxr-xr-x  1 root root            4.0K Jun 21 21:27 .
drwxr-xr-x 23 root root            4.0K Jun  1 01:04 ..
drwxr-xr-x  2 root root            4.0K Jun  7  2020 bin
drwxr-xr-x  2 root root            4.0K May  3  2020 boot
drwxr-xr-x  2  999 systemd-journal 4.0K Jun 10  2020 data
drwxr-xr-x  2 root root            4.0K Jun  7  2020 dev
drwxr-xr-x  1 root root            4.0K Jun 10  2020 etc
drwxr-xr-x  2 root root            4.0K May  3  2020 home
drwxr-xr-x  1 root root            4.0K Jun 10  2020 lib
drwxr-xr-x  2 root root            4.0K Jun  7  2020 lib64
drwxr-xr-x  2 root root            4.0K Jun  7  2020 media
drwxr-xr-x  2 root root            4.0K Jun  7  2020 mnt
drwxr-xr-x  2 root root            4.0K Jun  7  2020 opt
drwxr-xr-x  2 root root            4.0K May  3  2020 proc
drwx------  1 root root            4.0K Jun 10  2020 root
drwxr-xr-x  3 root root            4.0K Jun  7  2020 run
drwxr-xr-x  2 root root            4.0K Jun  7  2020 sbin
drwxr-xr-x  2 root root            4.0K Jun  7  2020 srv
drwxr-xr-x  2 root root            4.0K May  3  2020 sys
drwxrwxrwt  1 root root            4.0K Jun 10  2020 tmp
drwxr-xr-x  1 root root            4.0K Jun  7  2020 usr
drwxr-xr-x  1 root root            4.0K Jun  7  2020 var

将镜像从主机目录上卸载:

root@worker1:~# ctr i unmount /mnt
/mnt
root@worker1:~# ls /mnt

3. 容器操作

帮助信息:

root@worker1:~# ctr container
NAME:ctr containers - Manage containersUSAGE:ctr containers command [command options] [arguments...]COMMANDS:create                   Create containerdelete, del, remove, rm  Delete one or more existing containersinfo                     Get info about a containerlist, ls                 List containerslabel                    Set and clear labels for a containercheckpoint               Checkpoint a containerrestore                  Restore a container from checkpointOPTIONS:--help, -h  show help

创建容器:

# 创建一个nginx容器
root@master1:~# ctr c create docker.io/library/nginx:1.27.0 nginx
# 打印容器列表
root@master1:~# ctr c ls
CONTAINER    IMAGE                             RUNTIME
nginx        docker.io/library/nginx:1.27.0    io.containerd.runc.v2

查看容器详细信息:

root@master1:~# ctr c info nginx
{"ID": "nginx","Labels": {"io.containerd.image.config.stop-signal": "SIGQUIT","maintainer": "NGINX Docker Maintainers \u003cdocker-maint@nginx.com\u003e"},"Image": "docker.io/library/nginx:1.27.0","Runtime": {"Name": "io.containerd.runc.v2","Options": {"type_url": "containerd.runc.v1.Options"}},"SnapshotKey": "nginx","Snapshotter": "overlayfs","CreatedAt": "2024-06-22T07:08:10.924977879Z","UpdatedAt": "2024-06-22T07:08:10.924977879Z","Extensions": {},
...

删除容器:

root@master1:~# ctr c ls
CONTAINER    IMAGE                             RUNTIME
nginx        docker.io/library/nginx:1.27.0    io.containerd.runc.v2
root@master1:~# ctr c rm nginx
root@master1:~# ctr c ls
CONTAINER    IMAGE    RUNTIME

4. 任务

通过 container create 命令创建的容器,并没有处于运行状态,仅仅只是一个创建容器的声明。一个 container 对象包含了运行一个容器所需的资源及相关配置数据,表示 namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程还没有启动。

启动并进入容器:

root@master1:~# ctr c create docker.io/library/nginx:1.27.0 nginx
root@master1:~# ctr c ls
CONTAINER    IMAGE                             RUNTIME
nginx        docker.io/library/nginx:1.27.0    io.containerd.runc.v2
# 启动一个容器
root@master1:~# ctr task start -d nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
# 查看task列表,即运行的容器列表
root@master1:~# ctr task ls
TASK     PID      STATUS
nginx    63588    RUNNING
# 进入容器里面,需要指定--exec-id参数,值可以随意。
root@master1:~# ctr task exec --exec-id 0 -t nginx sh
# ls
bin   dev                  docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint.d  etc                   lib   media  opt  root  sbin  sys  usr
#

暂停/恢复容器:

root@master1:~# ctr task ls
TASK     PID      STATUS
nginx    63588    RUNNING
# 暂停容器
root@master1:~# ctr task pause nginx
root@master1:~# ctr task ls
TASK     PID      STATUS
nginx    63588    PAUSED
# 恢复容器
root@master1:~# ctr t resume  nginx
root@master1:~# ctr task ls
TASK     PID      STATUS
nginx    63588    RUNNING

杀死容器,同停止容器:

root@master1:~# ctr t kill nginx
root@master1:~# ctr task ls
TASK     PID      STATUS
nginx    63588    STOPPED

删除task:

root@master1:~# ctr t ls
TASK     PID      STATUS
nginx    63588    STOPPED
root@master1:~# ctr t rm nginx# 运行状态下删除task:
root@master1:~# ctr task ls
TASK     PID      STATUS
nginx    67604    RUNNING
root@master1:~# ctr t rm nginx
ERRO[0000] unable to delete nginx     error="task must be stopped before deletion: running: failed precondition"
ctr: task must be stopped before deletion: running: failed precondition

说明:

删除task之前必须停止或kill容器。

获取容器的 cgroup 相关信息:

root@master1:~# ctr t metrics nginx
ID       TIMESTAMP
nginx    seconds:1719041526  nanos:710831637METRIC                VALUE
pids.current          5
pids.limit            18446744073709551615
cpu.usage_usec        24082
cpu.user_usec         6337
cpu.system_usec       17745
cpu.nr_periods        0
cpu.nr_throttled      0
cpu.throttled_usec    0
memory.usage          4849664
memory.usage_limit    18446744073709551615
memory.swap_usage     0
memory.swap_limit     18446744073709551615

查看容器中所有进程在宿主机中的 PID:

root@master1:~# ctr t ps nginx
PID      INFO
67604    -
67644    -
67645    -
67646    -
67647    -
# 与ps命令查到的进程ID匹配。
root@master1:~# ps -elf | grep nginx | grep -v grep
0 S root       67583       1  0  80   0 - 309523 futex_ 15:29 ?       00:00:00 /usr/bin/containerd-shim-runc-v2 -namespace default -id nginx -address /run/containerd/containerd.sock
4 S root       67604   67583  0  80   0 -  2851 sigsus 15:29 ?        00:00:00 nginx: master process nginx -g daemon off;
5 S message+   67644   67604  0  80   0 -  2975 ep_pol 15:29 ?        00:00:00 nginx: worker process
5 S message+   67645   67604  0  80   0 -  2975 ep_pol 15:29 ?        00:00:00 nginx: worker process
5 S message+   67646   67604  0  80   0 -  2975 ep_pol 15:29 ?        00:00:00 nginx: worker process
5 S message+   67647   67604  0  80   0 -  2975 ep_pol 15:29 ?        00:00:00 nginx: worker process

5. 命名空间

Containerd中是用命名空间进行资源区分的。

命名空间生命周期管理:

# 查看ns列表
root@master1:~# ctr ns ls
NAME    LABELS
default
k8s.io
# 创建命名空间
root@master1:~# ctr ns create test
root@master1:~# ctr ns ls
NAME    LABELS
default
k8s.io
test
# 删除命名空间
root@master1:~# ctr ns rm test
test

指定命名空间选项:

root@master1:~# ctr i ls -q
docker.io/library/nginx:1.27.0
docker.io/library/redis:6.0.5
us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5
us-docker.pkg.dev/google-samples/containers/gke/gb-redis-follower:v2
root@master1:~# ctr -n k8s.io i ls -q
docker.io/flannel/flannel-cni-plugin:v1.4.1-flannel1
docker.io/flannel/flannel-cni-plugin@sha256:e88c0d84fa89679eb6cb6a28bc257d652ced8d1b2e44d54a592f0a2cd85dba53
docker.io/flannel/flannel:v0.25.4
docker.io/flannel/flannel@sha256:17415d91743e53fc4b852676a30a08915f131a2b6848d891ba5786eacd447076
docker.io/library/redis:6.0.5
quay.io/tigera/operator:v1.34.0
quay.io/tigera/operator@sha256:479ddc7ff9ab095058b96f6710bbf070abada86332e267d6e5dcc1df36ba2cc5
registry.aliyuncs.com/google_containers/coredns:v1.10.1

备注:

在使用ctr指定命名空间进行操作时,将-n xxx选项放到命令的前面。

6. ctr与docker

ctr 是 containerd 自带的工具, 有 namespaces 的概念,对于上层编排系统的支持,ctr 客户端 主要区分了 3 个命名空间分别是k8s.io、moby和default。

较新版本的Docker 底层默认调用的 也是containerd。 Docker 使用 containerd 下面的命名空间默认 moby,而不是 default,所以假如我们有用 docker 启动容器,那么我们也可以通过 ctr -n moby 来定位下面的容器:

[root@k8s ~]# docker run -d --name nginx nginx:latest
b6f9e425cc80ef576a1878ac5f94727cdee6397b845d2f0101263cd0ab00996c[root@k8s ~]# ctr -n moby c ls | grep b6f9e425cc
b6f9e425cc80ef576a1878ac5f94727cdee6397b845d2f0101263cd0ab00996c    -        io.containerd.runc.v2

遗留问题:

按照上面的说法类推,测试发现docker的镜像与ctr的镜像在moby命名空间下是对不上的,目前没有查到相关解释,作为遗留问题记录。测试版本:docker client:26.1.4docker server:20.10.6containerd.io 1.6.33

7. ctr与k8s、ctrictl

Kubernetes 下使用的 containerd 默认命名空间是 k8s.io。所以在导入镜像时需要指定命令空间为 k8s.io,否则使用 crictl images 无法查询到。

#docker导出镜像
docker save -o kube-controllers.tar docker.io/calico/kube-controllers:v3.26.1# ctr导出镜像(也支持多个镜像一起打包)
ctr -n k8s.io images export k8s-v1.28.2.tar registry.k8s.io/kube-apiserver:v1.28.2 registry.k8s.io/kube-controller-manager:v1.28.2 registry.k8s.io/kube-proxy:v1.28.2 registry.k8s.io/kube-scheduler:v1.28.2 registry.k8s.io/coredns/coredns:v1.10.1 registry.k8s.io/etcd:3.5.9-0#ctr导入镜像
ctr -n k8s.io image import kube-controllers.tar#查看镜像是否导入
crictl images

我们用crictl操作的均在k8s.io命名空间,使用ctr 看镜像列表就需要加上-n 参数。crictl 是只有一个k8s.io命名空间,但是没有-n 参数。

ctr images pull 拉取的镜像默认放在default,而 crictl pullkubelet 默认拉取的镜像都在 k8s.io 命名空间下。所以通过ctr导入镜像的时候特别注意一点,最好指定命名空间。

# 注意-n不能放在命令最后面,下面几行查看的镜像是一样的
ctr -n=k8s.io image ls
ctr -n k8s.io image ls# crictl 没有-n参数,操作都在k8s.io命名空间下。
crictl images# crictl image list/ls 等同于 ctr -n=k8s.io image list/ls使用ctr命令指定命名空间导入镜像
ctr -n=k8s.io image import dashboard.tar#查看镜像,可以看到可以查询到了
crictl images

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Paxos分布式共识算法

Paxos分布式共识算法 一、简介 Paxos算法是由莱斯利兰伯特(Leslie Lamport)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。它主要用于解决分布式系统中如何就某个值达成一致&#xff0c;并保证整个系统的一致性&#xff0c;即使在部分节点发生故障的情况下…

论文浅尝 | 基于生成模型的多模态实体链接

笔记整理&#xff1a;郭凌冰&#xff0c;浙江大学博士&#xff0c;研究方向为知识图谱 链接&#xff1a;https://arxiv.org/abs/2306.12725 1. 动机 多模态实体链接&#xff08;Multimodal Entity Linking&#xff0c;MEL&#xff09;旨在将带有多模态上下文的提及映射到知识库…

[SAP ABAP] 运算符

1.算数运算符 算术运算符描述加法-减法*乘法/除法MOD取余 示例1 输出结果: 输出结果: 2.比较运算符 比较运算符描述示例 等于 A B A EQ B <> 不等于 A <> B A NE B >大于 A > B A GT B <小于 A < B A LT B >大于或等于 A > B A GE B <小…

keep-alive实现页面缓存

<!--router-view 实现页面缓存--> <router-view v-slot"{Component}"><keep-alive :max"8"><component :is"Component"></component></keep-alive> </router-view>

Ansible调优之 Pipelining(任务流水线)详解

目录 Ansible 中的 Pipelining&#xff08;任务流水线&#xff09;详解Pipelining 的工作原理如何启用 PipeliningPipelining 的影响使用场景 什么是 requiretty&#xff1f;启用 requiretty 的影响禁用 requiretty 的方法 Ansible 中的 Pipelining&#xff08;任务流水线&…

2024年6月23日 十二生肖 今日运势

小运播报&#xff1a;2024年6月23日&#xff0c;星期日&#xff0c;农历五月十八 &#xff08;甲辰年庚午月戊午日&#xff09;&#xff0c;法定节假日。今天国际奥林匹克日&#xff0c;坚不可摧的意志&#xff0c;披荆斩棘的豪情&#xff0c;永远值得拥有&#xff01; 红榜生…

算法金 | 统计学的回归和机器学习中的回归有什么差别?

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 统计学中的回归 目标&#xff1a; 主要用于解释和推断自变量&#xff08;independent variables&#xff09;和因变量&#xff08;de…

array_key_exists() expects parameter 2 to be array, null given

公众号获取微信服务器IP地址 错误代码如下 public function getwxIP(){//获取微信服务器IP地址$accessToken $this->getwxoaiAccessToken();$userToken new UserToken();$result $userToken->curl_get("https: //api.weixin.qq.com/cgi-bin/get_api_domain_ip…

Chromium 调试指南2024 - 远程开发(上)

1. 引言 在现代软件开发过程中&#xff0c;远程开发已成为一种流行的工作方式。随着云计算和网络技术的迅猛发展&#xff0c;开发者不再局限于本地环境进行编码、测试和调试&#xff0c;而是可以借助远程服务器强大的计算资源和灵活的配置进行开发工作。远程开发不仅提升了开发…

PyTorch nn.CrossEntropyLoss() 交叉熵损失函数详解和要点提醒

文章目录 前置知识nn.CrossEntropyLoss() 交叉熵损失参数数学公式带权重的公式&#xff08;weight&#xff09;标签平滑&#xff08;label_smoothing&#xff09; 要点 附录参考链接 前置知识 深度学习&#xff1a;关于损失函数的一些前置知识&#xff08;PyTorch Loss&#x…

如何在Java中实现高效的文件读写

如何在Java中实现高效的文件读写 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java开发中&#xff0c;文件读写是一项常见且必不可少的操作。然而&#x…

vue判断是不是最新的请求接口返回的数据

有时候一个页面&#xff0c;我们可能会重复请求同一个接口&#xff0c;但是请求参数不同&#xff0c;如果第一个参数请求接口了&#xff0c;我们又使用第二个参数请求同一个接口了&#xff0c;但是第二个参数请求先返回数据&#xff0c;然后第一个参数才返回数据&#xff0c;这…

Day58 代码随想录打卡|二叉树篇---将有序数组转换为二叉搜索树

题目&#xff08;leecode T108&#xff09;&#xff1a; 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 方法&#xff1a;用有序数组构造平衡二叉搜索树&#xff0c;和我们之前有一题的思路差不多&#xff0c…

win11中截屏的快捷方式

在 Windows 11 中&#xff0c;有多种方式可以进行截屏&#xff08;屏幕截图&#xff09;&#xff0c;这里是一些常用的快捷方式&#xff1a; 全屏截图保存至剪贴板&#xff1a; 按 PrtScn &#xff08;打印屏幕键&#xff09;。这会把整个屏幕的截图保存到剪贴板&#xff0c;你…

遗传算法求解时间窗车辆路径规划问题(附python代码)

摘要 本研究提出了一种基于遗传算法的车辆路径规划&#xff08;VRP&#xff09;问题求解框架&#xff0c;它能够有效地处理一系列复杂约束&#xff0c;包括软时间窗、硬时间窗、行驶距离限制、车辆最大载重量、多个配送中心的协调、特定的配送顺序&#xff0c;以及多种车型的选…

【总结】攻击 AI 模型的方法

数据投毒 污染训练数据 后门攻击 通过设计隐蔽的触发器&#xff0c;使得模型在正常测试时无异常&#xff0c;而面对触发器样本时被操纵输出。后门攻击可以看作是特殊的数据投毒&#xff0c;但是也可以通过修改模型参数来实现 对抗样本 只对输入做微小的改动&#xff0c;使模型…

Python学习打卡:day13

day13 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day1397、初识对象98、类的成员方法类的定义和使用成员变量和成员方法成员方法的定义语法 99、类和对象在程序中通过类来描述基于类创建对象 100、…

Javaweb登录校验

登录校验 JWT令牌的相关操作需要添加相关依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>一、摘要 场景&#xff1a;当我们想要访问一个网站时&am…

cherry 笔记三(启动)

cherry启动很简单 app创建完 直接startup()就好了 func main() {app : cherry.Configure("./examples/config/profile-chat.json","chat-master",false,cherry.Cluster,)app.SetSerializer(cserializer.NewJSON())app.Startup() } Configure()--->N…

c++使用std::function/std::bind

1&#xff09;C入门级小知识&#xff0c;分享给将要学习或者正在学习C开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 std::function对象是对C中现有的可调用实体的一种类型安全的包裹&…