Docker Remote API 使用详解

文章目录

  • 1.容器相关
    • 1.1 列出所有容器
    • 1.2 创建新容器
    • 1.3 检查容器
    • 1.4 启动容器
    • 1.5 停止容器
    • 1.6 重启容器
    • 1.8 删除容器
    • 1.14 根据资源使用情况获取容器统计信息
    • 1.16 获取容器日志
  • 2.镜像相关
    • 2.1 获取镜像清单
    • 2.2 构建镜像
    • 2.4 检查镜像
    • 2.5 获取镜像的历史记录
    • 2.6 标记一个镜像
    • 2.8 删除镜像
    • 2.9 删除全部镜像

Docker Remote API是一个取代远程命令行界面(rcli)的REST API。本文中,我们将使用命令行工具cURL来处理url相关操作。cURL可以发送请求、获取以及发送数据、检索信息。

本文档能够完成,主要借助于以下文档

  • docker api 官方文档
  • dockerone组织翻译文档

1.容器相关

1.1 列出所有容器

GET /containers/json

URL:

  • /containers/json

查询参数:

  • all: 获取所有容器信息,默认为false,仅显示正在运行的容器
  • limit:返回最近创建的容器的数量,包括未运行的容器。例如:limit=5 ,则返回5个最近创建的5个容器信息
  • size:将容器的大小作为字段SizeRw和SizeRootFs返回,默认为false
  • filters:过滤器处理容器列表,编码为JSON (map[string][]string)。例如,{“status”: [" stopped "]}将只返回暂停的容器

请求示例:

  • 获取正在运行中的容器列表

curl http://127.0.0.1:5678/containers/json

  • 查询全部的容器(包含不是正在运行的容器)

curl http://127.0.0.1:5678/containers/json?all=1

响应结果:

[root@localhost ~]# curl http://10.20.29.21:6666/containers/json?all=true
[{"Id":"15ffc3340941281cd6f515c1d34d15ee0cea3ee70cd1a0e34e39f94fcf06c98b","Names":["/shipyard-swarm-agent"],"Image":"docker.io/swarm:latest","ImageID":"sha256:ff454b4a0e84e50c50e3df457ad44b80f1a67ec6ec75cff5117dd5dc46bf4965","Command":"/swarm join --addr 10.20.29.21:6666 token://a997b11fdba7ede2551f9f8a17483bee","Created":1554858486,"Ports":[{"PrivatePort":2375,"Type":"tcp"}],"Labels":{},"State":"running","Status":"Up About an hour","HostConfig":{"NetworkMode":"default"},"NetworkSettings":{"Networks":{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"74227783d8af05a30ae0d8817d984e815144387c1b1e4b7c6b9b10915579b61e","EndpointID":"9f85ced521dd4d081954de20af5350672fa08de18882614005d10ad2b94ff8b9","Gateway":"172.17.0.1","IPAddress":"172.17.0.4","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:04","DriverOpts":null}}},"Mounts":[{"Type":"volume","Name":"534f08f77e48bbc588756c5c1113807a3a0cbe8c6e073fb781fe6fd04a1d0d1c","Source":"","Destination":"/.swarm","Driver":"local","Mode":"","RW":true,"Propagation":""}]}
......

注:可通过python -mjson.tool可以将JSON数据格式化显示

成功后返回的参数:

  • ID:这个容器的ID
  • Names:这个容器的名称
  • Image:创建此容器时使用的镜像的名称
  • ImageID::创建此容器时使用的镜像的ID
  • Command:启动容器时运行的命令
  • Created:容器创建时间
  • Ports:这个容器暴露的端口
  • State:这个容器的状态(例如:已关闭)
  • Status:容器运行时长或关闭时长
  • NetworkSettings :容器网络设置的摘要信息
  • Mounts:容器的文件或目录挂载信息

响应状态码解释

  • 204 没有错误
  • 400 参数不对
  • 500 服务器错误

1.2 创建新容器

POST /containers/create

URL:

  • /containers/create

查询参数:

  • name:即将被创建容器的名称

创建容器参数:

  • Hostname:用于容器的主机名
  • Domainname:用于容器的域名
  • User:在容器内运行命令的用户
  • AttachStdin:是否连接到Stdin,默认为false
  • AttachStdout:是否连接到Stdout,默认为false
  • AttachStderr:是否连接到Stderr,默认为false
  • ExposedPorts:端口映射(容器需要暴露的端口)
  • PortBindings:公开的容器端口和它们应该映射到的主机端口的映射
  • Tty:将标准流附加到TTY,包括stdin它是否未关闭
  • OpenStdin:打开标准输入
  • StdinOnce:连接的客户端断开后关闭标准输入
  • Env:设置容器内部环境变量
  • Cmd:需要在容器内部执行的命令,命令以字符串的形式运行
  • Healthcheck:检查容器是否健康的运行
  • Image:创建容器时使用的镜像(名称)
  • Volumes:宿主机与容器之间文件或目录的映射
  • WorkingDir:运行命令的工作目录,即容器工作目录
  • Entrypoint:指定字符串命令所在目录
  • NetworkDisabled:是否禁用容器网络
  • MacAddress:容器的MAC地址
  • Labels:添加一个标签到容器
  • StopSignal:发出停止容器的信号
  • StopTimeout:以秒为单位停止容器的超时
  • HostConfig:依赖于我们所运行的主机的容器配置
  • NetworkingConfig :这个容器的网络配置

1、请求示例:

仅映射端口:

  • curl -X POST -H “Content-Type: application/json” -d ‘{“AttachStdin”: false,“AttachStdout”: true,“AttachStderr”: true,“Tty”: false,“OpenStdin”: false,“StdinOnce”: false,“Image”: “nginx:1.14”,“Volumes”: {“/mnt/data”:{}},“PortBindings”:{ “80/tcp”:[{“HostPort”: “8888”}]} }’ http://127.0.0.1:6666/containers/create?name=nginx

响应结果:

[root@localhost wasm]# curl -X POST -H "Content-Type: application/json" -d '{"AttachStdin": false,"AttachStdout": true,"AttachStderr": true,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Image": "nginx:1.14","Volumes": {"/mnt/data":{}},"PortBindings":{ "80/tcp":[{"HostPort": "8888"}]} }' http://127.0.0.1:6666/containers/create?name=nginx-test
{"Id":"5cee7175339b9cafbfa7b66e4b719aa4261a1f018f8f33dff4a50cf0ee73fc0f","Warnings":null}

2、请求示例:

映射端口及目录

  • curl -X POST -H “Content-Type: application/json” -d ‘{“AttachStdin”: false,“AttachStdout”: true,“AttachStderr”: true,“Tty”: false,“OpenStdin”: false,“StdinOnce”: false,“Image”: “zht-baseclient:v1.0”,“Binds”:[“/mnt/app/zht/baseclient/project:/data”,“/etc/localtime:/etc/localtime”,“/etc/timezone:/etc/timezone”],“ExposedPorts”: {“8081/tcp”: {}},“PortBindings”:{“8081/tcp”:[{“HostIp”:“”,“HostPort”:“18081”}]}}’ http://127.0.0.1:2375/containers/create?name=baseclient

响应结果:

[root@localhost baseclient]# curl -X POST -H "Content-Type: application/json" -d '{"AttachStdin": false,"AttachStdout": true,"AttachStderr": true,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Image": "zht-baseclient:v1.0","Binds":["/mnt/app/zht/baseclient/project:/data","/etc/localtime:/etc/localtime","/etc/timezone:/etc/timezone"],"ExposedPorts": {"8081/tcp": {}},"PortBindings":{"8081/tcp":[{"HostIp":"","HostPort":"18081"}]}}' http://127.0.0.1:2375/containers/create?name=baseclient
{"Id":"8c0ddcb1921760ccf3cad0279cc8281a3d81a87f58c37d300d558685a47e8c8f","Warnings":null}

3、请求示例:
映射端口及使用host模式映射端口

  • curl -X POST -H “Content-Type: application/json” -d ‘{“AttachStdin”: false,“AttachStdout”: true,“AttachStderr”: true,“Tty”: false,“OpenStdin”: false,“StdinOnce”: false,“Image”: “zht-baseclient:v1.0”,“Binds”:[“/mnt/app/zht/baseclient/project:/data”,“/etc/localtime:/etc/localtime”,“/etc/timezone:/etc/timezone”],“NetworkMode”:“host”,“PortBindings”:{},“RestartPolicy”:{“Name”:“unless-stopped”,“MaximumRetryCount”:0}}’ http://127.0.0.1:2375/containers/create?name=baseclient

响应结果:

[root@localhost ~]# curl -X POST -H "Content-Type: application/json" -d '{"AttachStdin": false,"AttachStdout": true,"AttachStderr": true,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Image": "zht-baseclient:v1.0","Binds":["/mnt/app/zht/baseclient/project:/data","/etc/localtime:/etc/localtime","/etc/timezone:/etc/timezone"],"NetworkMode":"host","PortBindings":{},"RestartPolicy":{"Name":"unless-stopped","MaximumRetryCount":0}}' http://127.0.0.1:2375/containers/create?name=baseclient
{"Id":"fda7518cd757e604d963c91f3684317c5f29e27db6a186bed74b7f94acff6a16","Warnings":null}

以上api各种使用方法灵感来源于:

hostconfig.json文件

文件路径:/var/lib/docker/containers/容器ID/hostconfig.json

[root@localhost 35a2f9491f6ad3d43a8e7c8b62acec1ccc82e90db844988b5a3c5f2ac630da5c]# cat hostconfig.json
{"Binds":["/etc/localtime:/etc/localtime","/etc/timezone:/etc/timezone","/mnt/public/mysql/data:/var/lib/mysql","/mnt/public/mysql/my.cnf:/etc/mysql/my.cnf"],"ContainerIDFile":"","LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"default","PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"13306"}]},"RestartPolicy":{"Name":"unless-stopped","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"shareable","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":[],"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DeviceCgroupRules":null,"DiskQuota":0,"KernelMemory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":null,"OomKillDisable":false,"PidsLimit":0,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0,"MaskedPaths":["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths":["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]}

注意:此时容器为Created(创建)状态,还需要启动容器

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                         PORTS                    NAMES
5cee7175339b        nginx:1.14            "nginx -g 'daemon of…"   6 seconds ago       Created                                                 nginx[root@localhost ~# docker start  nginx

响应状态码解释

  • 201 容器已成功创建
    成功后返回的参数:

  • ID:被创建的容器ID

  • Warnings:创建容器时遇到的警告(错误)

  • 400 参数不对

  • 404 没有这个容器

  • 409 冲突

  • 500 服务器错误

1.3 检查容器

获取关于容器的底层信息。

GET /containers/(id)/json

URL:

  • /containers/(id)/json

路径参数:

  • ID:容器的ID或名称

查询参数:

  • size:将容器的大小作为字段SizeRw和SizeRootFs返回,默认为false

请求示例:

  • curl http://10.20.29.21:6666/containers/4eccce38c57f/json

响应结果:

[root@localhost ~]# curl http://10.20.29.21:5678/containers/4eccce38c57f/json
{"Id":"4eccce38c57f183feef8ec76dfa64bbc0caa21e26b3968efa98121fe037bdad1","Created":"2018-12-07T12:56:38.189610103Z","Path":"nginx","Args":["-g","daemon off;"],"State":{"Status":"exited","Running":false,"Paused":false,"Restarting":false,"OOMKilled":false,"Dead":false,"Pid":0,"ExitCode":0,"Error":"","StartedAt":"2019-01-12T01:32:54.412546647Z","FinishedAt":"2019-01-12T01:47:57.571820667Z"},"Image":"sha256:4037a5562b030fd80ec889bb885405587a52cfef898ffb7402649005dfda75ff"
......

注:可通过python -mjson.tool可以将JSON数据格式化显示

响应状态码解释

  • 204 没有错误
  • 404 没有这个容器
  • 500 服务器错误

1.4 启动容器

POST /containers/(id)/start

URL:

  • /containers/{id}/start

路径参数:

  • ID:容器的ID或名称

查询参数:

  • detachKeys:覆盖用于分离容器的键序列。格式是一个单独的字符[a-Z]或ctrl-其中是下列之一:a-z,@,^,[,,或_

请求示例:

curl -v --raw -X POST http://10.20.29.15:5678/containers/4eccce38c57f/start

响应结果:

[root@localhost ~]# curl -v --raw -X POST http://10.20.29.15:5678/containers/4eccce38c57f/start
* About to connect() to 10.20.29.21 port 2375 (#0)
*   Trying 10.20.29.21...
* Connected to 10.20.29.21 (10.20.29.21) port 2375 (#0)
> POST /containers/4eccce38c57f/start HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 10.20.29.21:2375
> Accept: */*
> 
< HTTP/1.1 204 No Content
< Api-Version: 1.39
< Docker-Experimental: false
< Ostype: linux
< Server: Docker/18.09.0 (linux)
< Date: Tue, 09 Apr 2019 09:14:06 GMT
< 
* Connection #0 to host 10.20.29.21 left intact

响应状态码解释

  • 204 没有错误
  • 304 容器已经启动
  • 404 没有这个容器
  • 500 服务器错误

1.5 停止容器

POST /containers/(id)/stop

URL:

  • /containers/{id}/stop

路径参数:

  • ID:容器的ID或名称

查询参数:

  • t:在关闭容器之前等待的秒数

请求示例:

  • curl -v --raw -X POST http://10.20.29.15:5678/containers/f59103b6bfd1/stop #直接关闭容器

  • curl -v --raw -X POST http://127.0.0.1:5678/containers/容器ID/stop?t=5 #等待5秒关闭容器

响应结果:

[root@localhost ~]# curl -v --raw -X POST http://10.20.29.15:5678/containers/f59103b6bfd1/stop
* About to connect() to 10.20.29.15 port 5678 (#0)
*   Trying 10.20.29.15...
* Connected to 10.20.29.15 (10.20.29.15) port 5678 (#0)
> POST /containers/f59103b6bfd1/stop HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 10.20.29.15:5678
> Accept: */*
> 
< HTTP/1.1 204 No Content
< Api-Version: 1.39
< Docker-Experimental: false
< Ostype: linux
< Server: Docker/18.09.3 (linux)
< Date: Tue, 09 Apr 2019 09:23:15 GMT
< 
* Connection #0 to host 10.20.29.15 left intact

响应状态码解释

  • 204 没有错误
  • 304 容器已经停止
  • 404 没有这个容器
  • 500 服务器错误

1.6 重启容器

POST /containers/{id}/restart

URL:

  • /containers/{id}/restart

路径参数:

  • ID:容器的ID或名称

查询参数:

  • t:在关闭容器之前等待的秒数

请求示例:

  • curl -v --raw -X POST http://10.20.29.15:5678/containers/f59103b6bfd1/restart

  • curl -v --raw -X POST http://10.20.29.15:5678/containers/f59103b6bfd1/restart?t=5

响应结果:

[root@localhost ~]# curl -v --raw -X POST http://10.20.29.15:5678/containers/f59103b6bfd1/restart
* About to connect() to 10.20.29.15 port 5678 (#0)
*   Trying 10.20.29.15...
* Connected to 10.20.29.15 (10.20.29.15) port 5678 (#0)
> POST /containers/f59103b6bfd1/restart HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 10.20.29.15:5678
> Accept: */*
> 
< HTTP/1.1 204 No Content
< Api-Version: 1.39
< Docker-Experimental: false
< Ostype: linux
< Server: Docker/18.09.3 (linux)
< Date: Tue, 09 Apr 2019 09:36:29 GMT
< 
* Connection #0 to host 10.20.29.15 left intact

响应状态码解释:

  • 204 没有错误
  • 404 没有这样的容器
  • 500 服务器错误

1.8 删除容器

DELETE /containers/{id}

URL:

  • /containers/{id}

路径参数:

  • ID:容器的ID或名称

查询参数:

  • v :删除与容器关联的卷,默认为false
  • force: 如果容器正在运行,请在删除之前杀死它,默认为false
  • link:删除与容器关联的指定链接,默认为false

请求示例:

curl -v -X DELETE http://127.0.0.1:5678/containers/6c66e2135f24

响应结果:

[root@localhost ~]# curl -v -X DELETE http://127.0.0.1:5678/containers/6c66e2135f24
* About to connect() to 127.0.0.1 port 5678 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 5678 (#0)
> DELETE /containers/6c66e2135f24 HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 127.0.0.1:5678
> Accept: */*
> 
< HTTP/1.1 204 No Content
< Api-Version: 1.39
< Docker-Experimental: false
< Ostype: linux
< Server: Docker/18.09.3 (linux)
< Date: Tue, 09 Apr 2019 07:42:04 GMT
< 
* Connection #0 to host 127.0.0.1 left intact

注:删除正在运行的容器,如果使用以上请求命令,则会报错:

< HTTP/1.1 409 Conflict
< Api-Version: 1.39
< Content-Type: application/json
< Docker-Experimental: false
< Ostype: linux
< Server: Docker/18.09.3 (linux)
< Date: Tue, 09 Apr 2019 07:41:33 GMT
< Content-Length: 179
< 
{"message":"You cannot remove a running container f59103b6bfd1cbf753c97cfd63b83f484bdae1b3f14ff0f5b192d4e191e22f5b. Stop the container before attempting removal or force remove"}
* Connection #0 to host 127.0.0.1 left intact

若需要删除正在运行的容器,请使用如下请求命令:

  • curl -v -X DELETE http://127.0.0.1:5678/containers/a3e7b90dd836?force=true

响应结果:

[root@localhost ~]# curl -v -X DELETE http://127.0.0.1:5678/containers/a3e7b90dd836?force=true
* About to connect() to 127.0.0.1 port 5678 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 5678 (#0)
> DELETE /containers/a3e7b90dd836?force=true HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 127.0.0.1:5678
> Accept: */*
> 
< HTTP/1.1 204 No Content
< Api-Version: 1.39
< Docker-Experimental: false
< Ostype: linux
< Server: Docker/18.09.3 (linux)
< Date: Tue, 09 Apr 2019 05:22:23 GMT
< 
* Connection #0 to host 127.0.0.1 left intact

响应状态码解释:

  • 204 没有错误
  • 400 坏的参数
  • 404 没有这个容器
  • 409 冲突(如:容器正在运行)
  • 500 服务器错误

1.14 根据资源使用情况获取容器统计信息

此api用来显示容器使用的系统资源,下面是输出的主要内容:

  • [CONTAINER]:以短格式显示容器的 ID。
  • [CPU %]:CPU 的使用情况。
  • [MEM USAGE / LIMIT]:当前使用的内存和最大可以使用的内存。
  • [MEM %]:以百分比的形式显示内存使用情况。
  • [NET I/O]:网络 I/O 数据。
  • [BLOCK I/O]:磁盘 I/O 数据。
  • [PIDS]:PID 号。

GET /containers/{id}/stats

URL:

  • /containers/{id}/stats

路径参数:

  • ID:容器的ID或名称

查询参数:

  • stream:流输出,如果为false,则统计信息将输出一次,然后将断开连接。默认为true

默认情况下,只返回当前的状态,但可以每隔 1 秒钟刷新一次输出的内容,如果不想持续的监控容器使用资源的情况可以通过stream=false 参数只输出当前的状态。

请求示例:

  • curl http://10.20.29.21:2375/containers/545a4863e32f/stats?stream=false

响应结果:

[root@localhost ~]# curl http://10.20.29.21:2375/containers/545a4863e32f/stats?stream=false
{"read":"2019-04-09T12:49:39.82789284Z","preread":"2019-04-09T12:49:38.825314468Z","pids_stats":{"current":25},"blkio_stats":{"io_service_bytes_recursive":[],"io_serviced_recursive":[],"io_queue_recursive":[],"io_service_time_recursive":[],"io_wait_time_recursive":[],"io_merged_recursive":[],"io_time_recursive":[],"sectors_recursive":[]},"num_procs":0,"storage_stats":{},"cpu_stats":{"cpu_usage":{"total_usage":27356238626,"percpu_usage":[3568026315,3567907546,2604128115,4723295390,5379339014,5697405323,818240931,997895992],"usage_in_kernelmode":1120000000,"usage_in_usermode":1890000000},"system_cpu_usage":835459830000000,"online_cpus":8,"throttling_data":{"periods":0,"throttled_periods":0,"throttled_time":0}},"precpu_stats":{"cpu_usage":{"total_usage":27354558405,"percpu_usage":[3568026315,3567840282,2604054202,4723295390,5377875899,5697405323,818165002,997895992],"usage_in_kernelmode":1120000000,"usage_in_usermode":1890000000},"system_cpu_usage":835451830000000,"online_cpus":8,"throttling_data":{"periods":0,"throttled_periods":0,"throttled_time":0}},"memory_stats":{"usage":99807232,"max_usage":101842944,"stats":{"active_anon":99774464,"active_file":0,"cache":32768,"dirty":0,"hierarchical_memory_limit":9223372036854771712,"hierarchical_memsw_limit":9223372036854771712,"inactive_anon":0,"inactive_file":32768,"mapped_file":32768,"pgfault":19237,"pgmajfault":0,"pgpgin":11226,"pgpgout":10876,"rss":99774464,"rss_huge":90177536,"total_active_anon":99774464,"total_active_file":0,"total_cache":32768,"total_dirty":0,"total_inactive_anon":0,"total_inactive_file":32768,"total_mapped_file":32768,"total_pgfault":19237,"total_pgmajfault":0,"total_pgpgin":11226,"total_pgpgout":10876,"total_rss":99774464,"total_rss_huge":90177536,"total_unevictable":0,"total_writeback":0,"unevictable":0,"writeback":0},"limit":8182054912},"name":"/zookeeper","id":"545a4863e32f4b2280bb8e5a469159a711fdb146266ecf0bf1133920024a8b2c","networks":{"eth0":{"rx_bytes":656,"rx_packets":8,"rx_errors":0,"rx_dropped":0,"tx_bytes":0,"tx_packets":0,"tx_errors":0,"tx_dropped":0}}}

注:可通过python -mjson.tool可以将JSON数据格式化显示

响应状态码解释:

  • 200 没有错误
  • 404 没有这样的容器
  • 500 服务器错误

1.16 获取容器日志

GET /containers/{id}/logs

URL:

  • /containers/{id}/logs

路径参数:

  • id:容器的名称或者ID

查询参数:

  • follow:以数据流的形式返回日志,将返回一个带有Connection: upgrade头的101 HTTP响应,默认为false
  • stdout:标准输出日志,默认为false
  • stderr:日志输出为标准错误,默认为false
  • since:只返回这次以后的日志,作为UNIX时间戳
  • until:只返回在此之前的日志,作为UNIX时间戳
  • timestamps:将时间戳添加到每个日志行,默认为false
  • tail:只返回日志末尾的日志行数。指定为整数或all以输出所有日志行,例:tail=100

请求示例:

curl http://10.20.29.21:6666/containers/ba5cf1607701/logs?stdout=true&stdout=true&follow=true&tail=all

[root@localhost ~]# curl http://10.20.29.21:6666/containers/ba5cf1607701/logs?stdout=true&stdout=true&follow=true&tail=all
[7] 31749
[8] 31750
[9] 31751
[8]   完成                  stdout=true
[root@localhost ~]# ±0.20.29.154 - - [11/Apr/2019:16:34:03 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36" "-"
䯰.20.29.154 - - [11/Apr/2019:16:34:03 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://10.20.29.21:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36" "-"
10.20.29.154 - - [11/Apr/2019:16:34:15 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36" "-"
10.20.29.154 - - [11/Apr/2019:16:35:05 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36" "-"
10.20.29.154 - - [11/Apr/2019:16:35:06 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36" "-"
10.20.29.154 - - [11/Apr/2019:16:35:06 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36" "-"
......
\10.20.29.26 - - [11/Apr/2019:17:34:19 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
`10.20.29.26 - - [11/Apr/2019:17:34:20 +0000] "GET /curl HTTP/1.1" 404 169 "-" "curl/7.29.0" "-"
\10.20.29.26 - - [11/Apr/2019:17:34:20 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
`10.20.29.26 - - [11/Apr/2019:17:34:20 +0000] "GET /curl HTTP/1.1" 404 169 "-" "curl/7.29.0" "-"
\10.20.29.26 - - [11/Apr/2019:17:34:20 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"[7]   完成                  curl http://10.20.29.21:6666/containers/ba5cf1607701/logs?stdout=true
[9]   完成                  follow=true

响应状态码解释:

  • 101 日志作为流数据返回
  • 200 没有错误
  • 4.4 没有这个容器
  • 500 服务器错误

2.镜像相关

2.1 获取镜像清单

返回服务器上的镜像列表

GET /images/json

URL

  • /images/json

查询参数

  • all :显示所有图片。默认为false,只显示最后一层的图像(没有子层),即最终层
  • filters:过滤器的JSON编码值(map[string][]string),用于处理镜像列表
  • digests:将摘要信息显示为每个镜像上的RepoDigests字段,默认为false

请求示例

  • curl http://127.0.0.1:6666/images/json

响应结果

[root@localhost wasm]# curl http://127.0.0.1:6666/images/json | python -m json.tool% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100  3550    0  3550    0     0   525k      0 --:--:-- --:--:-- --:--:--  577k
[{"Containers": -1,"Created": 1554895762,"Id": "sha256:8bc2104b95693541c31524ba25b7819af14b45360c0efa0c7d5b69344050a96b","Labels": null,"ParentId": "sha256:996598012bcb1435d8e801cc3bc7041cb257f958095ff9c52f181c22ffbf24f6","RepoDigests": null,"RepoTags": ["basis:latest"],"SharedSize": -1,"Size": 12369196,"VirtualSize": 12369196},{"Containers": -1,"Created": 1554895758,"Id": "sha256:1c5c084fb13ab7cca82b6ee226a4ac19dbeb6f2983e8a81b1d5905ff83e062e4","Labels": null,"ParentId": "sha256:49dc3f8ad471e760b96ac88fb367c6d72e503b34ae7767a7421b64fc54430e1c","RepoDigests": ["<none>@<none>"],"RepoTags": ["<none>:<none>"],"SharedSize": -1,"Size": 345580587,"VirtualSize": 345580587},

响应状态码解释

  • 200 与查询匹配的镜像的摘要镜像数据
  • 500 服务器错误

2.2 构建镜像

POST /build

查询参数

  • t:设置镜像名,要以name:tag格式应用于图像的名称和可选标记。如果省略标记,latest则假定为默认值。

请求示例

  • curl -X POST “http://10.20.29.21:6666/build?t=contract:1.1&remote=https://github.com/wuxiaoyong/apiserver_demos/raw/master/contract-1.1.tar.gz”

  • t=contract:1.1 build后的镜像名与版本号

  • remote dockerfile的tar包链接地址

响应结果

[root@localhost /]# curl -X POST "http://10.20.29.21:6666/build?t=contract:1.1&remote=https://github.com/wuxiaoyong/apiserver_demos/raw/master/contract-1.1.tar.gz"
{"status":"https://github.com/wuxiaoyong/apiserver_demos/raw/master/contract-1.1.tar.gz","progressDetail":{"current":4719},"progress":" 4.719kB","id":"Downloading context"}
{"stream":"Step 1/7 : FROM golang:1.11"}
{"stream":"\n"}
{"stream":" ---\u003e 28daaf3edbdb\n"}
{"stream":"Step 2/7 : ENV GO_PATH=/go/src/"}
{"stream":"\n"}
{"stream":" ---\u003e Running in 2ce99db89d68\n"}
{"stream":"Removing intermediate container 2ce99db89d68\n"}
{"stream":" ---\u003e 5d96a6cb3d7b\n"}
{"stream":"Step 3/7 : ENV CON_PATH=/go/src/git.phjr.com/contract-server"}
{"stream":"\n"}
......
{"stream":" ---\u003e Running in 82573697eedf\n"}
{"stream":"Removing intermediate container 82573697eedf\n"}
{"stream":" ---\u003e 3c470596b89e\n"}
{"aux":{"ID":"sha256:3c470596b89e4ee7a9a63e69fb6624f44a2a84f5974aab15af1d1964bd59ade4"}}
{"stream":"Successfully built 3c470596b89e\n"}
{"stream":"Successfully tagged contract:1.1\n"}[root@localhost /]# docker images
REPOSITORY                    TAG                            IMAGE ID            CREATED             SIZE
contract                      1.1                            3c470596b89e        12 seconds ago      837MB

响应状态码解释

  • 200 没有错误
  • 400 参数错误
  • 500 服务器错误

2.4 检查镜像

获取关于镜像的底层信息

GET /images/{name}/json

URL:

  • /images/{name}/json

路径参数:

  • name: 镜像名称或ID

请求示例:

  • curl http://127.0.0.1:6666/images/8bc2104b9569/json

响应结果

[root@localhost ~]# curl http://127.0.0.1:6666/images/8bc2104b9569/json | python -mjson.tool% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100  2420    0  2420    0     0   557k      0 --:--:-- --:--:-- --:--:--  590k
{"Architecture": "amd64","Author": "","Comment": "","Config": {"ArgsEscaped": true,"AttachStderr": false,"AttachStdin": false,"AttachStdout": false,"Cmd": ["/bin/sh","-c","/mnt/wasm /mnt/compare.wasm 1 1"],"Domainname": "","Entrypoint": null,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","SRC_DIR=/go/src/git.phjr.com"],"Hostname": "","Image": "sha256:996598012bcb1435d8e801cc3bc7041cb257f958095ff9c52f181c22ffbf24f6","Labels": null,"OnBuild": null,"OpenStdin": false,"StdinOnce": false,"Tty": false,"User": "","Volumes": null,"WorkingDir": ""},"Container": "1dfcec665a0479c6519ffdea5516bc619b70a154114700d46ba583f44074ee12","ContainerConfig": {"ArgsEscaped": true,"AttachStderr": false,"AttachStdin": false,"AttachStdout": false,"Cmd": ["/bin/sh","-c","#(nop) ","CMD [\"/bin/sh\" \"-c\" \"/mnt/wasm /mnt/compare.wasm 1 1\"]"],"Domainname": "","Entrypoint": null,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","SRC_DIR=/go/src/git.phjr.com"],"Hostname": "1dfcec665a04","Image": "sha256:996598012bcb1435d8e801cc3bc7041cb257f958095ff9c52f181c22ffbf24f6","Labels": {},"OnBuild": null,"OpenStdin": false,"StdinOnce": false,"Tty": false,"User": "","Volumes": null,"WorkingDir": ""

响应结果解释

  • 200 没有错误
  • 404 没有这个镜像
  • 500 服务器错误

2.5 获取镜像的历史记录

每一个镜像都可能依赖于由一个或多个下层的组成的另一个镜像,这条请求就是查看最终镜像的镜像层记录

GET /images/{name}/history

URL:

  • /images/{name}/history

路径参数:

  • name: 镜像的名称或者ID

请求示例

  • curl http://10.20.29.26:6666/images/8bc2104b9569/history

响应结果

[root@localhost ~]# curl http://10.20.29.26:6666/images/8bc2104b9569/history |python -mjson.tool% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100  1356  100  1356    0     0   287k      0 --:--:-- --:--:-- --:--:--  331k
[{"Comment": "","Created": 1554895762,"CreatedBy": "/bin/sh -c #(nop)  CMD [\"/bin/sh\" \"-c\" \"/mnt/wasm /mnt/compare.wasm 1 1\"]","Id": "sha256:8bc2104b95693541c31524ba25b7819af14b45360c0efa0c7d5b69344050a96b","Size": 0,"Tags": ["basis:latest"]},{"Comment": "","Created": 1554895762,"CreatedBy": "/bin/sh -c #(nop) COPY file:c4cd840b1e62e31e6717e6ae158d6533291637acab1efaa4b77f6d7185181cd5 in /mnt/ ","Id": "sha256:996598012bcb1435d8e801cc3bc7041cb257f958095ff9c52f181c22ffbf24f6","Size": 2444971,"Tags": null},{"Comment": "","Created": 1554895761,"CreatedBy": "/bin/sh -c #(nop) COPY file:8cc7ec5e2f20daf71d43c8467d3ab0419c50e6d694510d02329be966e7c6f75c in /mnt/ ","Id": "sha256:f766d15551a2f5e9f9450f2f7cafdc959bf80de69a6d612946b9569b42ef7961","Size": 4391090,"Tags": null},{"Comment": "","Created": 1554895759,"CreatedBy": "/bin/sh -c #(nop)  ENV SRC_DIR=/go/src/git.phjr.com","Id": "sha256:20e3faf18f3500632d1496f3d1034d84cd856669f5470a49b7cf36e80938fa6f","Size": 0,"Tags": null},{"Comment": "","Created": 1554852018,"CreatedBy": "/bin/sh -c #(nop)  CMD [\"/bin/sh\"]","Id": "sha256:cdf98d1859c1beb33ec70507249d34bacf888d59c24df3204057f9a6c758dddb","Size": 0,"Tags": ["alpine:latest"]},

响应状态码解释:

  • 200 镜像层列表
  • 404 没有这个镜像
  • 500 服务器错误

2.6 标记一个镜像

为一个镜像打一个标签

POST /images/{name}/tag

URL:

  • /images/{name}/tag

路径参数

  • name:镜像名称或者ID

查询参数:

  • repo:要标记的存储库的名称
  • tag:新标记的名称

请求示例:

  • curl -v -X POST http://10.20.29.26:6666/images/8bc2104b9569/tag?repo=镜像新标签名:版本号

响应结果:

[root@localhost ~]# curl -v -X POST http://10.20.29.26:6666/images/8bc2104b9569/tag?repo=10.20.29.45/myproject/basechain:1.1
* About to connect() to 10.20.29.26 port 6666 (#0)
*   Trying 10.20.29.26...
* Connected to 10.20.29.26 (10.20.29.26) port 6666 (#0)
> POST /images/8bc2104b9569/tag?repo=10.20.29.45/myproject/basechain:1.1 HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 10.20.29.26:6666
> Accept: */*
> 
< HTTP/1.1 201 Created
< Api-Version: 1.39
< Docker-Experimental: false
< Ostype: linux
< Server: Docker/18.09.4 (linux)
< Date: Thu, 11 Apr 2019 03:39:09 GMT
< Content-Length: 0
< 
* Connection #0 to host 10.20.29.26 left intact[root@localhost ~]# docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
10.20.29.45/myproject/basechain   1.1                 8bc2104b9569        16 hours ago        12.4MB
basis                             latest              8bc2104b9569        16 hours ago        12.4MB

响应状态码解释

  • 201 没有错误
  • 400 参数错误
  • 409 冲突(例:新标签名称冲突)
  • 500 服务器错误

2.8 删除镜像

删除一个镜像,以及该镜像引用的任何未标记的父镜像

如果镜像具有子镜像、正在运行的容器使用该镜像或正在生成镜像,则无法删除该镜像

DELETE /images/{name}

URL:

  • /images/{name}

路径参数

  • name: 镜像名称或者ID

查询参数

  • force:即使被停止的容器或其他标记使用,也要删除镜像,默认为false

  • noprune:不能删除未加标签的父镜像,默认为false

请求示例

  • curl -v -X DELETE http://127.0.0.1:5678/images/镜像ID或镜像名

响应结果

[root@localhost ~]# curl -v -X DELETE http://127.0.0.1:6666/images/nginx:1.15
* About to connect() to 127.0.0.1 port 6666 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 6666 (#0)
> DELETE /images/nginx:1.15 HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 127.0.0.1:6666
> Accept: */*
> 
< HTTP/1.1 200 OK
< Api-Version: 1.39
< Content-Type: application/json
< Docker-Experimental: false
< Ostype: linux
< Server: Docker/18.09.0 (linux)
< Date: Wed, 10 Apr 2019 22:59:19 GMT
< Content-Length: 379
< 
[{"Untagged":"nginx:1.15"},{"Untagged":"nginx@sha256:d14bbdf20f42375020c80315041ba252623b489966c5b5b0ce9d244fa4bf0400"},{"Deleted":"sha256:bb776ce48575796501bcc53e511563116132b789ab0552d520513da8c738cba2"},{"Deleted":"sha256:43e4bf6ebb72bc17f5f35af0ace5e5d5db31b2b631fac2cca3d4be2420ca9758"},{"Deleted":"sha256:2ceeec5cb749c4154ae2390bc3e0c2a4dee8663ca7012ca37a293734de83d498"}]
* Connection #0 to host 127.0.0.1 left intact

响应状态码解释

  • 200 镜像已成功删除
  • 404 没有这个镜像
  • 409 冲突(例如:镜像正在被某一个容器使用,没有使用强制删除)
  • 500 服务器错误

2.9 删除全部镜像

使用此方法可删除所有已停止的容器,请慎用!!!

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

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

相关文章

java学习part11继承

1.类的继承 继承为了让类之间建立联系&#xff0c;同时复用代码。 子类和父类的同名函数构成重写&#xff0c;能覆盖&#xff0c;除非用super.xx()调。 同名属性不会覆盖&#xff0c;而是并存&#xff0c;用super.xx调。 2.子类初始化 子类会自动调用父类无参构造super() 3.重…

辅助驾驶功能开发-功能规范篇-XPeng-NGP高速自主导航驾驶功能

1.概述 本文档明确对 NGP 的定义及设计要求,将作为自主开发的设计指导文 件。 2.功能定义 根据应用场景将横向控制功能分为两类,非高速公路和高速公路功能。在非高速公路场景中,主要由LCC/TJA/ALC来解决各类细化场景,在高速场景中,NGP来解决细化场景。(本文中高速公路…

如何把自己银行卡里的钱转账充值到自己支付宝上?

原文来源&#xff1a;https://www.caochai.com/article-4524.html 支付宝余额是支付宝核心功能之一&#xff0c;主要用于网购支付、线下支付、转账等场景。用户可以将银行卡、余额宝等资金转入或转出至支付宝余额&#xff0c;实现快速转账和支付。 如何把自己银行卡里的钱转账…

PyCharm 安装插件Vue

一、打开PyCharm工具 File -> Settings -> Plugins 二、在项目中添加Vue.js的依赖项。 npm install vue 三、页面应用

基于51单片机的百叶窗控制系统设计

**单片机设计介绍&#xff0c; 基于51单片机的百叶窗控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的百叶窗控制系统设计可以分为硬件设计和软件设计两个方面。下面是一个简要的设计介绍&#xff1a; …

【微服务专题】SpringBoot自动配置简单源码解析

目录 前言阅读对象阅读导航前置知识什么是自动配置0.1 基本概念0.2 SpringBoot中的【约定大于配置】0.3 从SpringMVC看【约定大于配置】0.4 从Redis看【约定大于配置】0.5 小结 笔记正文一、EnableAutoConfiguration源码解析二、SpringBoot常用条件注解源码解析2.1 自定义条件注…

WordPress插件开发教程手册 — 钩子(Hooks)

钩子是用一段代码添加/修改另外一段代码的方式&#xff0c;是 WordPress插件和主题与 WordPress 内核交互的基础&#xff0c;钩子在 WordPress 内核中也被广泛使用。WordPress 中有两种钩子&#xff0c;Action 和 Filter。使用钩子时&#xff0c;我们需要先编写一个自定义函数作…

我的创作纪念日第256天

机缘 时间过得好快啊&#xff0c;没想过一眨眼博客写了已经快一年了&#xff0c;这俩月其实写的挺少的&#xff0c;因为一方面是上了项目&#xff0c;一方面要备考研究生考试&#xff0c;所以很难权衡自己的时间和精力。 收获 写博客对我来说&#xff0c;提升能力是一方面&am…

Python爬虫图片及相关知识讲解

1. 导入所需依赖 pip install requests # 导入request库&#xff0c;用于发起网络请求re # python自带&#xff0c;不需要导入&#xff0c;正则表达式库&#xff0c;用于匹配规则 os # 系统库&#xff0c;用于操作文件夹、文件2. requests库介绍 以下是 requests 库的…

HCIP-七、IS-IS 综合实验

七、IS-IS 综合实验 实验拓扑实验需求及解法1.如图所示&#xff0c;配置所有路由器的接口IP地址。2.运行IS-IS&#xff0c;进程号13.IS-IS优化4.路径优化 实验拓扑 实验需求及解法 本实验模拟IS-IS综合网络&#xff0c;完成以下需求&#xff1a; 1.如图所示&#xff0c;配置所…

指针的使用和传址调用

1.引入 学习指针的⽬的是使⽤指针解决问题&#xff0c;那什么问题&#xff0c;⾮指针不可呢&#xff1f; 例如&#xff1a;写⼀个函数&#xff0c;交换两个整型变量的值。 ⼀番思考后&#xff0c;我们可能写出这样的代码&#xff1a; #include <stdio.h> void Swap1(int…

2017年7月13日 Go生态洞察:向Go 2迈进

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

影刀RPA_boss直聘翻页(避坑)

boss直聘翻页这里有个坑 问题&#xff1a; 无限循环中&#xff0c;点击下一页按钮&#xff0c;直到不可点击为止。 发现&#xff0c;在点到第5页的时候&#xff0c;再次点击下一页&#xff0c;直接就点击了页码10&#xff0c;导致流程直接就结束了。 在第5页进行校验&#xff0…

Unity 场景切换

Unity场景切换可使用以下方法&#xff1a; 1、SceneManager.LoadScene()方法&#xff1a; using UnityEngine.SceneManagement;// 切换到Scene2场景 SceneManager.LoadScene("Scene2"); 2、使用SceneManager.LoadSceneAsync()方法异步加载场景&#xff0c;异步加载…

2005-2023年6月中国全球投资追踪数据(China-Global-Investment-Tracker-2023-Spring)

2005-2023年6月中国全球投资追踪数据&#xff08;China-Global-Investment-Tracker-2023-Spring&#xff09; 1、时间;2005-2023年6月 2、来源&#xff1a;American Enterprise Institute 3、指标&#xff1a;Year、Month、Investor、Quantity、in、Millions、Share、Size、…

大一统模型 Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记

Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记 一、Abstract二、引言三、相关工作实例感知通过类别名进行检索通过语言表达式的检索通过指代标注的检索 统一的视觉模型Unified Learning ParadigmsUnified Model Architectures 四、方法4.1 Pr…

罗技M590鼠标usb优联连接不上

手里有一个罗技M590鼠标从18年4月一直用到现在&#xff0c;质量很好&#xff0c;除了滚轮有些松别的没毛病。最近一台笔记本电脑办公不太够用&#xff0c;又领了一个台式机&#xff0c;就想到M590支持双模连接&#xff0c;并且支持Flow&#xff0c;就把usb优联接收器从电池仓拿…

Java学习路径:入门学习、深入学习、核心技术,操作案例和实际代码示例

学习路径&#xff1a;入门学习、深入学习、核心技术&#xff0c; 每个主题都包括很多的操作案例和实际代码示例。 a. 入门学习&#xff1a; 1. 基础语法&#xff1a; 变量和数据类型&#xff1a; // 定义和初始化变量 int age 25;// 不同数据类型的声明 double price 19.99…

React基础入门

文章目录 创建项目组件和事件更新状态导出组件jsx react是目前最流行的前端框架&#xff0c;几乎也不用太介绍了。 创建项目 首先下载node.js&#xff0c;安装成功后&#xff0c;最好换成国内的源 npm config set registry https://registry.npm.taobao.org然后就可以使用脚…

AI动画制作 StableDiffusion

1.brew -v 2.安装爬虫项目包所必需的python和git等系列系统支持部件 brew install cmake protobuf rust python3.10 git wget pod --version brew link --overwrite cocoapods 3.从github网站克隆stable-diffusion-webui爬虫项目包至本地 ssh-add /Users/haijunyan/.ssh/id_rs…