四、Docker 命令

4.1 帮助命令

4.1.1 docker version

[root@boxiaoyuan ~]# docker version   # 查看docker版本信息
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/amd64

4.1.2 docker help(重要)

# docker --help  # docker 命令帮助

Commands:
    attach                  # 当前 shell 下 attach 连接指定运行镜像
    build                   # 通过 Dockerfile 定制镜像
    commit                  # 提交当前容器为新的镜像
    cp                       # 从容器中拷贝指定文件或者目录到宿主机中
    create                  # 创建一个新的容器,同run,但不启动容器
    diff                    # 查看 docker 容器变化
    events                  # 从 docker 服务获取容器实时事件
    exec                    # 在已存在的容器上运行命令
    export                  # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
    history                 # 展示一个镜像形成历史
    images                  # 列出系统当前镜像
    import                  # 从tar包中的内容创建一个新的文件系统映像[对应 export]
    info                    # 显示系统相关信息
    inspect                 # 查看容器详细信息
    kill                    # kill 指定 docker 容器
    load                    # 从一个 tar 包中加载一个镜像[对应 save]
    login                   # 注册或者登陆一个 docker 源服务器
    logout                  # 从当前 Docker registry 退出
    logs                    # 输出当前容器日志信息
    port                    # 查看映射端口对应的容器内部源端口
    pause                   # 暂停容器
    ps                      # 列出容器列表
    pull                    # 从docker镜像源服务器拉取指定镜像或者库镜像
    push                    # 推送指定镜像或者库镜像至docker源服务器
    restart                 # 重启运行的容器
    rm                      # 移除一个或者多个容器
    rmi                     # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
    run                     # 创建一个新的容器并运行一个命令
    save                    # 保存一个镜像为一个 tar 包[对应 load]
    search                  # 在 docker hub 中搜索镜像
    start                   # 启动容器
    stop                    # 停止容器
    tag                     # 给源中镜像打标签
    top                     # 查看容器中运行的进程信息
    unpause                 # 取消暂停容器
    version                 # 查看 docker 版本号
    wait                    # 截取容器停止时的退出状态值

4.1.3 docker info

# docker info  # 显示 Docker 系统信息,包括镜像和容器数

Containers: 1 # 容器个数
Images: 22    # 镜像个数
Storage Driver: devicemapper # 存储驱动
Pool Name: docker-8:17-3221225728-pool
 Pool Blocksize: 65.54 kB
 Data file: /data/docker/devicemapper/devicemapper/data
 Metadata file: /data/docker/devicemapper/devicemapper/metadata
 Data Space Used: 1.83 GB
 Data Space Total: 107.4 GB
 Metadata Space Used: 2.191 MB
 Metadata Space Total: 2.147 GB
 Library Version: 1.02.84-RHEL7 (2014-03-26) Execution Driver: native-0.2 # 存储驱动 Kernel Version: 3.10.0-123.el7.x86_64
Operating System: CentOS Linux 7 (Core) 

4.2 镜像命令

4.2.1 docker search

# docker search   # 从 Docker Hub 搜索镜像

--automated:只列出automated build类型的镜像
--no-trunc:显示完整的镜像描述
-s:列出收藏数不小于指定值的镜像
示例:
# docker search -s 100 ubuntu # 查找 star 数至少为 100 的镜像,找出只有官方镜像 start 数超过 100,默认不加 s 选项找出所有相关 ubuntu 镜像
NAME      DESCRIPTION                  STARS     OFFICIAL   AUTOMATED
ubuntu    Official Ubuntu base image 425 [OK]

4.2.2 docker pull && docker push

# docker pull #下载镜像
Usage: docker pull [OPTIONS] NAME[:TAG]
Pull an image or a repository from the registry
  -a, --all-tags=false Download all tagged images in the repository
# docker push # push 推送指定镜像 Usage: docker push NAME[:TAG] Push an image or a repository to the registry 示例: # docker pull ubuntu # 下载官方 ubuntu docker 镜像,默认下载latest版本官方库镜像 # docker pull ubuntu:
14.04 # 下载指定版本 ubuntu 官方镜像 # docker push 192.168.0.100:5000/ubuntu # 推送镜像库到私有源[可注册 docker 官方账户,推送到官方自有账户] # docker push 192.168.0.100:5000/ubuntu:14.04 # 推送指定镜像到私有源

4.2.3 docker images

列出本地主机上的镜像

# docker images
Usage: docker images [OPTIONS] [NAME]
List images
  -a, 列出本地所有的镜像(包括中间映像层)
  --digests:显示镜像的摘要信息
  --no-trunc:显示完整的镜像信息
  -q, 只显示镜像ID
示例:
# docker images # 显示当前系统镜像,不包括过渡层镜像
# docker images -a # 显示当前系统所有镜像,包括过渡层镜像
# docker images ubuntu # 显示当前系统 docker ubuntu 库中的所有镜像

REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu                     12.04               ebe4be4dd427 4 weeks ago         210.6 MB
ubuntu                     14.04               e54ca5efa2e9 4 weeks ago         276.5 MB
ubuntu                     14.04-ssh           6334d3ac099a 7 weeks ago         383.2 MB

各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像,如果不指定一个镜像的版本标签,例如只使用ubuntu,docker将默认使用ubuntu:latest镜像。

4.2.4 docker rmi

删除一个或者多个镜像

# docker rmi #删除一个或多个镜像

  -f, # 强制移除镜像不管是否有容器使用该镜像
删除单个:docker rmi –f 镜像ID
删除多个:docker rmi –f 镜像名1:TAG 镜像名2:TAG
删除全部:docker rmi –f $(docker images -qa)

4.3 容器命令

[root@boxiaoyuan ~]# docker pull centos
latest: Pulling from centos

28b0a3c5ee4c: Pull complete 
1f2965b8bcc4: Pull complete 
ee2526f4865b: Pull complete 
Digest: sha256:b40cee82d6f98a785b6ae35748c958804621dc0f2194759a2b8911744457337d
Status: Downloaded newer image for centos:latest
[root@boxiaoyuan ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              d351d647d655        2 weeks ago         64.18 MB
ubuntu              14.04               fe62d34455b7        7 weeks ago         188.2 MB
centos              6                   4f2ed42dccff        3 months ago        193.9 MB
centos              latest              ee2526f4865b        3 months ago        201.8 MB
hello-world         latest              9f5834b25059        6 months ago        1.84 kB
[root@boxiaoyuan ~]# 

4.3.1 新建并启动容器

# docker run [OPTIONS] IMAGE [COMMAND][ARG…]

OPTIONS说明(常用):有些是一个减号,有些是两个减号
--name=“容器新名字”:为容器指定一个名称;
-d:后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与-t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
-P:随机端口映射;
-p:指定端口映射,有一下四种格式
        ip:hostPort:containerPort
        ip:containerPort
        hostPort:containerPort
        containerPort

示例:

创建一个内存限制512MB,主机名为test1,名为docker_test1后台运行bash的容器

[root@boxiaoyuan ~]# docker run -i -t -m 512M -h test1 -d --name docker_test1 centos /bin/bash
d4736c5327b94e75d09cbea7540dd50fa7eb91a434a7af5a0ec03c24bf66b3f8
查看正在运行的容器 [root@boxiaoyuan
~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4736c5327b9 centos "/bin/bash" 16 seconds ago Up 15 seconds docker_test1
连接正在运行的容器 [root@boxiaoyuan
~]# docker attach docker_test1 [root@test1 /]# pwd / [root@test1 /]# exit exit [root@boxiaoyuan ~]#

4.3.2 列出当前所有正在运行的容器

# docker ps [option] # 列出当前所有正在运行的容器

OPTIONS说明(常用):
-a:列出当前所有正在运行的容器+历史上运行过的
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
--no-trunc:不截断输出

可查看到正在运行的CentOS

[root@boxiaoyuan ~]# docker start d4736c5327b9
d4736c5327b9
[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d4736c5327b9        centos              "/bin/bash"         8 minutes ago       Up 5 seconds                            docker_test1 

4.3.3 退出容器

两种方式:

1.exit:容器停止并退出
2.ctrl+P+Q:容器不停止退出

示例:

容器停止退出

[root@boxiaoyuan ~]# docker attach d4736c5327b9
[root@test1 /]# exit
exit

再次在宿主机上查看当前运行的docker进程,CentOS的状态已显示Exited

[root@boxiaoyuan ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
d4736c5327b9        centos              "/bin/bash"         14 minutes ago      Exited (0) About a minute ago                       docker_test1

容器不停止退出

重新启动CentOS容器 将该容器命名为 myCentOS

[root@boxiaoyuan ~]# docker run -it --name myCentOS centos
[root@cec6887925d9 /]# 

另起终端,在宿主机终端查看当前运行的docker进程可以看到已启动成功

[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
cec6887925d9        centos              "/bin/bash"         About a minute ago   Up About a minute                       myCentOS

ctrl+P 再 ctrl+Q 此时回到宿主机终端

[root@cec6887925d9 /]# [root@boxiaoyuan ~]# 
[root@boxiaoyuan ~]# 

可再次查看当前运行的docker进程 并没有停止

[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
cec6887925d9        centos              "/bin/bash"         About a minute ago   Up About a minute                       myCentOS            
[root@boxiaoyuan ~]# docker ps -n 2
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
cec6887925d9        centos              "/bin/bash"         3 minutes ago       Up 3 minutes                                   myCentOS            
d4736c5327b9        centos              "/bin/bash"         19 minutes ago      Exited (0) 6 minutes ago                       docker_test1  

4.3.4 启动容器

docker start容器ID或者容器名

示例:

查看最近两次启动的容器,接下来启动容器id为d4736c5327b9的容器:

[root@boxiaoyuan ~]# docker ps -n 2
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
cec6887925d9        centos              "/bin/bash"         5 minutes ago       Up 5 minutes                                   myCentOS            
d4736c5327b9        centos              "/bin/bash"         20 minutes ago      Exited (0) 7 minutes ago                       docker_test1        
[root@boxiaoyuan ~]# docker start d4736c5327b9
d4736c5327b9
[root@boxiaoyuan ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
cec6887925d9        centos              "/bin/bash"         6 minutes ago       Up 5 minutes                            myCentOS            
d4736c5327b9        centos              "/bin/bash"         21 minutes ago      Up 3 seconds                            docker_test1  

4.3.5 重启容器

docker restart 容器ID或容器名

示例:

容器id为cec6887925d9的运行时间为7minutes:

[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
cec6887925d9        centos              "/bin/bash"         7 minutes ago       Up 7 minutes                            myCentOS            
d4736c5327b9        centos              "/bin/bash"         22 minutes ago      Up About a minute                       docker_test1

docker restart 容器id/容器名称

[root@boxiaoyuan ~]# docker restart cec6887925d9
cec6887925d9
[root@boxiaoyuan ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
cec6887925d9        centos              "/bin/bash"         9 minutes ago       Up 5 seconds                            myCentOS            
d4736c5327b9        centos              "/bin/bash"         24 minutes ago      Up 3 minutes                            docker_test1        

容器id为cec6887925d9重启后,运行时间为 5 seconds。

4.3.6 停止容器(缓慢停止)

docker stop 容器ID或容器名

示例:

[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
cec6887925d9        centos              "/bin/bash"         11 minutes ago      Up About a minute                       myCentOS            
d4736c5327b9        centos              "/bin/bash"         26 minutes ago      Up 5 minutes                            docker_test1        
[root@boxiaoyuan ~]# docker stop d4736c5327b9
d4736c5327b9
[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
cec6887925d9        centos              "/bin/bash"         12 minutes ago      Up 3 minutes                            myCentOS            

4.3.7 强制停止容器(迅速停止)

docker kill 容器ID或容器名

示例:

[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
cec6887925d9        centos              "/bin/bash"         13 minutes ago      Up 4 minutes                            myCentOS            
[root@boxiaoyuan ~]# docker kill cec6887925d9
cec6887925d9
[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

4.3.8 删除已停止的容器

docker rm 容器ID

一次性删除多个容器:

1)   docker rm –f $(docker ps -aq)
(2)   docker ps –aq | xargs docker rm

示例:

[root@boxiaoyuan ~]# docker ps -n 2
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                            PORTS               NAMES
cec6887925d9        centos              "/bin/bash"         15 minutes ago      Exited (137) About a minute ago                       myCentOS            
d4736c5327b9        centos              "/bin/bash"         30 minutes ago      Exited (137) 3 minutes ago                            docker_test1        
[root@boxiaoyuan ~]# docker rm cec6887925d9
cec6887925d9
[root@boxiaoyuan ~]# docker ps -n 2
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
d4736c5327b9        centos              "/bin/bash"         30 minutes ago      Exited (137) 3 minutes ago                       docker_test1        
fa0101ec9408        centos:6            "/bin/bash"         5 hours ago         Exited (137) 5 hours ago                         adoring_mestorf 

4.3.9 启动守护式容器

启动守护式进程 docker run -d 容器名

问题:使用docker ps -a进行查看,会发现容器已经退出

很重要的要说明的一点:docker容器后台运行,就必须有一个前台进程。

容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动相应的service即可,例如service nginx start。

但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他就的没事可做了,所以,最佳的方案是,将你要运行的程序以前台进程的形式运行

示例:

[root@boxiaoyuan ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              d351d647d655        2 weeks ago         64.18 MB
ubuntu              14.04               fe62d34455b7        7 weeks ago         188.2 MB
centos              6                   4f2ed42dccff        3 months ago        193.9 MB
centos              latest              ee2526f4865b        3 months ago        201.8 MB
hello-world         latest              9f5834b25059        6 months ago        1.84 kB
[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@boxiaoyuan ~]# docker run -d centos
e3c14d53584d39c8d0dd5cbd7e51b75fa0bcd5fc1d870390048a1a43510b71b5
[root@boxiaoyuan ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
e3c14d53584d        centos              "/bin/bash"         8 seconds ago       Exited (0) 7 seconds ago                         pensive_engelbart   
d4736c5327b9        centos              "/bin/bash"         34 minutes ago      Exited (137) 7 minutes ago                       docker_test1        
fa0101ec9408        centos:6            "/bin/bash"         5 hours ago         Exited (137) 5 hours ago                         adoring_mestorf     
635a6d6ecc18        centos:6            "/bin/bash"         5 hours ago         Exited (0) 5 hours ago                           reverent_einstein   
bcd12a83d56a        ubuntu:14.04        "/bin/bash"         5 hours ago         Exited (0) 5 hours ago                           evil_meitner        
3ea8b1a018bc        hello-world         "/hello"            6 hours ago         Exited (0) 6 hours ago                           drunk_lumiere       

4.3.10 查看容器日志

docker logs –f –t –tail 容器ID

说明:

-t 是加入时间戳

-f 跟随最新的日志打印

--tail 数字显示最后多少条

示例:

## 启动守护式容器,每隔2秒打印hello world,让容器在前台持续工作,容器即可不被杀死

[root@boxiaoyuan ~]# docker run -d centos /bin/bash -c "while true;do echo hello world;sleep 2;done"
6a98184a890015fd62ef3181fbbff43b31aa4f7e55c7b647be1afd212ba4fbe0
[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
6a98184a8900        centos              "/bin/bash -c 'while   5 seconds ago       Up 4 seconds                            angry_einstein  
查看日志    
[root@boxiaoyuan ~]# docker logs 6a98184a8900
hello world
hello world
hello world
加入时间戳
[root@boxiaoyuan ~]# docker logs -t 6a98184a89002019-07-06T09:42:33.009614392Z hello world
2019-07-06T09:42:35.010433313Z hello world
2019-07-06T09:42:37.011895800Z hello world
2019-07-06T09:42:39.013284338Z hello world
2019-07-06T09:42:41.015046406Z hello world
不停的追加
[root@boxiaoyuan ~]# docker logs -t -f 6a98184a89002019-07-06T09:43:05.032197099Z hello world
2019-07-06T09:43:07.033547771Z hello world
2019-07-06T09:43:09.034927764Z hello world
2019-07-06T09:43:11.036388252Z hello world
从倒数第3行开始追加
[root@boxiaoyuan ~]# docker logs -t --tail 3 6a98184a8900
2019-07-06T09:43:25.048735307Z hello world
2019-07-06T09:43:27.049003087Z hello world
2019-07-06T09:43:29.050668716Z hello world

4.3.11 查看容器内运行的进程

docker top 容器ID

示例:

[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
6a98184a8900        centos              "/bin/bash -c 'while   6 minutes ago       Up 6 minutes                            angry_einstein      
[root@boxiaoyuan ~]# docker top 6a98184a8900
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                68889               53122               0                   17:42               ?                   00:00:00            /bin/bash -c while true;do echo hello world;sleep 2;done
root                69200               68889               0                   17:48               ?                   00:00:00            sleep 2

4.3.12 查看容器内部的细节

docker inspect 容器ID

4.3.13 进入正在运行的容器并以命令行交互

docker exec –it 容器ID bashShell

重新进入docker attach 容器ID

区别:

attach:直接进入容器启动命令的终端,不会启动新的进程

exec:是在容器中打开新的终端,并且可以启动新的进程

示例:

进入正在运行的容器并进行命令的交互

[root@boxiaoyuan ~]# docker run -it centos /bin/bash
[root@2b34c6a3990b /]# pwd
/
ctrl+P 再 ctrl+Q
[root@2b34c6a3990b /]# [root@boxiaoyuan ~]# [root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b34c6a3990b centos "/bin/bash" 14 seconds ago Up 13 seconds sick_yonath docker attach 容器id/容器名称,重新进入正在运行的容器
[root@boxiaoyuan
~]# docker attach 2b34c6a3990b [root@2b34c6a3990b /]# ls anaconda-post.log dev home lib64 mnt proc run srv tmp var bin etc lib media opt root sbin sys usr

另外一种方式进入

[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
2b34c6a3990b        centos              "/bin/bash"         About a minute ago   Up About a minute                       sick_yonath         
[root@boxiaoyuan ~]# docker exec -it 2b34c6a3990b /bin/bash
[root@2b34c6a3990b /]#
[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
2b34c6a3990b        centos              "/bin/bash"         2 minutes ago       Up 2 minutes                            sick_yonath   
不进入容器,并执行命令 [root@boxiaoyuan
~]# docker exec -it 2b34c6a3990b ls anaconda-post.log dev home lib64 mnt proc run srv tmp var bin etc lib media opt root sbin sys usr [root@boxiaoyuan ~]#

4.3.14 从容器内拷贝文件到主机上

docker cp 容器ID:容器内路径 目的主机路径

示例:

此处将容器内的 /tmp/yum.log 拷贝到 宿主机的 /root 下:

[root@boxiaoyuan ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
2b34c6a3990b        centos              "/bin/bash"         6 minutes ago       Up 6 minutes                            sick_yonath         
[root@boxiaoyuan ~]# docker attach 2b34c6a3990b

[root@2b34c6a3990b /]# cd /tmp/
[root@2b34c6a3990b tmp]# ls
ks-script-eC059Y  yum.log
ctrl+P 再 ctrl+Q [root@2b34c6a3990b tmp]# [root@boxiaoyuan
~]# [root@boxiaoyuan ~]# ls anaconda-ks.cfg install.log.syslog 模板 图片 下载 桌面 install.log 公共的 视频 文档 音乐
## docker cp 容器id/容器名称:容器文件 宿主机路径 (注意 容器id/容器名称 后面有个:) [root@boxiaoyuan
~]# docker cp 2b34c6a3990b:/tmp/yum.log /root/ [root@boxiaoyuan ~]# ls anaconda-ks.cfg install.log.syslog 公共的 视频 文档 音乐 install.log yum.log 模板 图片 下载 桌面

4.3.15 暂停和取消暂停一个容器

# docker pause CONTAINER                  # 暂停一个容器,方便 commit
# docker unpause CONTAINER                  # 取消暂停的容器

4.3.16 提交指定容器为镜像

# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] # 提交指定容器为镜像

-a, --author="" Author (e.g., "John Hannibal Smith [email protected]")
-m, --message="" Commit message
-p, --pause=true Pause container during commit
# 默认 commit 是暂停状态

猜你喜欢

转载自www.cnblogs.com/zhuzhaoli/p/11142489.html