Docker容器实战(00)-底子命令大全

打印 上一主题 下一主题

主题 874|帖子 874|积分 2622

1 容器生命周期管理

1.1 docker start

启动一或多个已被制止的容器。
  1. # 启动已被停止的容器myrunoob
  2. docker start myrunoob
复制代码
1.2 docker stop

制止一个运行中的容器
  1. docker stop myrunoob
复制代码
1.3 docker restart

重启容器
  1. docker restart myrunoob
复制代码
1.4 docker run

创建一个新的容器并运行一个命令。
要根据 docker images 命令的结果启动对应镜像的容器,执行:

  • 运行 docker images 命令检察当前系统中所有可用的镜像列表。
  • 从结果中找到您想要启动的镜像的 REPOSITORY 和 TAG。
  • 利用 docker run 命令启动一个新的容器。该命令的根本格式为 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]。此中 IMAGE 是镜像的名称,可能包括 TAG(如果未指定,则默以为 latest)。
案例:

  • 检察镜像列表:
  1. docker images
复制代码
输出:
  1. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  2. ubuntu              18.04               c3c304cb4f22        2 weeks ago         64.2MB
  3. nginx               latest              9beeba249f3e        3 weeks ago         109MB
复制代码
启动名为 nginx 的镜像:
  1. docker run -d -p 8080:80 --name mynginx nginx
复制代码
在这个例子中:

  • -d 选项表示在后台运行容器。
  • -p 8080:80 表示将容器的 80 端口映射到主机的 8080 端口。
  • --name mynginx 为您的容器设置了一个名字 mynginx,方便以后引用。
  • nginx 是您选择的镜像名称。
如果您需要利用特定的标签,可以将其附加到镜像名称背面,例如 nginx:1.17。
根据具体需求添加或修改命令行选项,如需在容器启动时执行特定的命令或传递环境变量等。
实例:
  1. docker run \
  2. -p 6379:6379 --name redis \
  3. # 将主机上的 /home/redis6/data 目录挂载到容器内部的 /data 目录,以便可以将 Redis 数据持久化到主机
  4. -v /home/redis6/data:/data \
  5. # 将主机上的 /home/redis6/conf/redis.conf 文件挂载到容器内部的 /etc/redis/redis.conf 文件,以便可以使用自定义的 Redis 配置文件
  6. -v /home/redis6/conf/redis.conf:/etc/redis/redis.conf \
  7. # 指定要使用的 Redis 镜像及版本号,并在后台运行容器
  8. -d redis:6.2.7 \
  9. # 在容器内部执行的命令,启动 Redis 服务,并使用 /etc/redis/redis.conf 配置文件
  10. redis-server /etc/redis/redis.conf
复制代码
  1. -a stdin
  2.   指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  3. -d
  4.   后台运行容器,并返回容器ID;
  5. -i:--interactive    以交互模式运行容器,通常与 -t 同时使用,即使未连接STDIN也保持打开状态
  6. -P: 随机端口映射,容器内部端口随机映射到主机的端口
  7. -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  8. -t: --tty  Allocate a pseudo-TTY为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  9. --name="nginx-lb"
  10.   为容器指定一个名称
  11. --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  12. --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  13. -h "mars": 指定容器的hostname;
  14. -e username="ritchie": 设置环境变量;
  15. --env-file=[]: 从指定文件读入环境变量;
  16. --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
  17. -m :设置容器使用内存最大值;
  18. --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container
  19. --link=[]: 添加链接到另一个容器;
  20. --expose=[]: 开放一个端口或一组端口;
  21. --volume , -v: 绑定一个卷
  22. # 设置容器的重启策略为 always,只能在 Docker 1.2 或更高版本中使用
  23. --restart=always
复制代码
2 本地镜像管理(镜像操纵命令)

2.1 image
  1. # 列出本机所有 image 文件
  2. $ docker image ls
复制代码
  1. # 删除 image 文件
  2. $ docker image rm [imageName]
复制代码
实战
  1. [root@scheduler-center-1 ~]# docker ps
  2. CONTAINER ID   IMAGE                         COMMAND                  CREATED        STATUS        PORTS                                       NAMES
  3. fb88be2a8283   xuxueli/xxl-job-admin:2.4.0   "sh -c 'java -jar $J…"   15 hours ago   Up 15 hours   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   xxl-job-admin
  4. [root@scheduler-center-1 ~]# docker image rm xxl-job-admin
  5. Error response from daemon: No such image: xxl-job-admin:latest
  6. [root@scheduler-center-1 ~]# docker  rm xxl-job-admin
  7. Error response from daemon: You cannot remove a running container fb88be2a828361ed7173d94a346a7c7c2a4aa11bb17d82450a4424ddf44651f0. Stop the container before attempting removal or force remove
  8. [root@scheduler-center-1 ~]# docker  rm xuxueli/xxl-job-admin:2.4.0
  9. Error response from daemon: No such container: xuxueli/xxl-job-admin:2.4.0
复制代码
试图删除 Docker 容器和 Docker 镜像,但遇到报错:

  • 删除容器时报错:
    1. docker rm xxl-job-admin
    复制代码
    错误信息:You cannot remove a running container fb88be2a8283... Stop the container before attempting removal or force remove
    缘故原由:你不能删除正在运行的容器。在这种情况下,容器 "fb88be2a8283" 处于运行状态。
    办理方法:首先制止容器,然后再删除。制止容器:
    1. docker stop xxl-job-admin
    复制代码
    然后再尝试删除容器。
  • 删除镜像时报错:
    1. docker image rm xxl-job-admin
    复制代码
    错误信息:Error response from daemon: No such image: xxl-job-admin:latest
    缘故原由:Docker 引擎无法找到名为 "xxl-job-admin" 的镜像,可能是由于该镜像不存在或者被定名为 "xuxueli/xxl-job-admin:2.4.0"。
    办理方法:确保要删除的镜像名称是正确的。如果你要删除 "xuxueli/xxl-job-admin:2.4.0",则应该利用如下命令:
    1. docker image rm xuxueli/xxl-job-admin:2.4.0
    复制代码
image inspect

检察 Docker 镜像详细信息:
  1. [root@service-monitoring ~]# docker image inspect mysql:5.7.42-oracle | grep -i version
  2.                 "GOSU_VERSION=1.16",
  3.                 "MYSQL_VERSION=5.7.42-1.el7",
  4.                 "MYSQL_SHELL_VERSION=8.0.33-1.el7"
  5.         "DockerVersion": "20.10.23",
  6.                 "GOSU_VERSION=1.16",
  7.                 "MYSQL_VERSION=5.7.42-1.el7",
  8.                 "MYSQL_SHELL_VERSION=8.0.33-1.el7"
复制代码
有时可用于检察 lastest 标签的 image,版本号到底多少。
而 docker inspect 命令是用于检察 Docker 对象(如容器、镜像、网络等)的详细信息,它不仅可以检察镜像的元数据,还可以检察容器的元数据、网络的元数据等。
image文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以利用。为节省时间,只管利用别人制作好的 image 文件。即使定制,也应基于别人的 image 文件举行加工,而不是从0开始。
为方便共享,image 文件制作完成后,上传到仓库:

  • Docker 官方仓库 Docker Hub 是最重要、最常用的 image 仓库
  • 出售本身制作的 image 文件也可
2.2 images
  1. docker images = docker image ls
复制代码
列出当前系统所有可用 Docker 镜像。提供repository、tag、image ID、和size的摘要信息。可检察在本地机器下载或创建的镜像。

docker image 和 docker images 区别:

  • docker image 命令是 Docker 17.06 版本后新增命令,用于管理 Docker 镜像。可用来列出本地镜像、删除本地镜像、构建镜像等操纵。如利用 docker image ls 命令可以列出本地所有的镜像
  • docker images 命令是早期版本的 Docker 命令,用于列出本地所有镜像。功能与 docker image ls完全相同,只是命令不同
2.3 rmi

不想要某 image 时可用。
等效命令:
  1. docker rmi imageId
复制代码
2.4 tag

docker image build

从Dockerfile构建image
  1. Usage:  docker image build [OPTIONS] PATH | URL | -
复制代码
history
  1. docker history image_id
复制代码

docker save

可将Docker镜像保存成tar文件,方便在不同环境中迁徙和分享镜像。
  1. docker save
  2.         # OPTIONS为可选参数
  3.         [OPTIONS]
  4.         # IMAGE为需要导出的Docker镜像的名称(可以是多个)
  5.         IMAGE [IMAGE...]
复制代码
如:
  1. # 将myimage镜像保存为名为myimage.tar的tar文件,并指定了输出路径为/path/to/。
  2. docker save -o /path/to/myimage.tar myimage
复制代码
  1. -o, --output string:指定输出的压缩文件(.tar或.tgz)路径和名称
  2. -q, --quiet:静默模式,只输出错误信息和进度条
  3. --tag string:指定要导出的镜像的tag名称
复制代码
运行这个命令之前,要先利用docker pull命令下载需要导出的镜像。
docker load

docker import

3 container

3.1 容器文件

image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件:

  • image 文件
  • 容器文件
关闭容器并不会删除容器文件,仅是容器制止运行。
docker container ls
  1. # 列出本机正在运行的容器
  2. [root@scheduler-center-1 ~]# docker container ls
  3. CONTAINER ID   IMAGE                         COMMAND                  CREATED        STATUS        PORTS                                       NAMES
  4. fb88be2a8283   xuxueli/xxl-job-admin:2.4.0   "sh -c 'java -jar $J…"   16 hours ago   Up 16 hours   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   xxl-job-admin
复制代码
  1. # 列出本机所有容器,包括终止运行的容器
  2. docker container ls --all(-a)
复制代码
输出结果包括容器 ID。许多地方都要提供这 ID,如上一节终止容器运行的docker container kill命令。
有人说 docker ps & docker ps -a 更方便检察 container 运行状态呀!由于 docker container options 是Docker 1.13中的更新,docker container ls 与 docker ps 功能相同,但语义更明确,简化Docker用法,更保举新写法。
-q直接显示当前所有容器的 container id
  1. docker container ls -aq
  2. docker container ls -a | awk {'print$1'}
复制代码

过滤状态字段显示
  1. docker container ls -f "status=exited"
复制代码

docker container rm

终止运行的容器文件,依然会占据硬盘空间,可以利用docker container rm命令删除。
  1. docker container rm [containerID]
复制代码
运行上面的命令之后,再利用docker container ls -a命令,就会发现被删除的容器文件已经消失了。
全部删除

由于一个个指定 containerid 很贫苦,可以全部删除:
  1. docker rm $(docker container ls -aq)
复制代码
条件过滤删除

好比,我们想把退出的给全部删除


  • 筛选出退出状态的image 文件

    直接删除
  1. docker rm $(docker container ls -f "status=exited" -q)
复制代码
docker container commit

根据容器的更改创建新image,好比在原 image 底子上安装了新的软件,那就可以上传新 image。
  1. Usage:  docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
复制代码

可简写为
  1. docker commit
复制代码
4 容器操纵命令

4.1 ps

docker ps ,用于列出当前正在运行的容器的命令。它可以显示容器的 ID、名称、状态、启动时间、所利用的镜像等信息。
如果在命令行中执行 docker ps,会输出当前正在运行的容器的列表,包括容器的 ID、名称、状态、启动时间、所利用的镜像等信息。例如:
  1. CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS          PORTS                                       NAMES
  2. ec88509b8b1b   mysql:5.7.42-oracle       "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp         mysql
复制代码
上面的输出表示只有一个名为 mysql 的容器正在运行,它利用的是 mysql:5.7.42-oracle 镜像,而且将其 3306 端口映射到主机的 3306 端口。
  1. [root@service-monitoring home]# docker ps -a
  2. CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS                      PORTS     NAMES
  3. ec88509b8b1b   mysql:5.7.42-oracle   "docker-entrypoint.s…"   10 minutes ago   Exited (1) 10 minutes ago             mysql
  4. 60180275418c   hello-world           "/hello"                 2 days ago       Exited (0) 2 days ago                 laughing_mcclintock
  5. [root@service-monitoring home]#
复制代码
4.2 inspect

docker inspect : 获取容器/镜像的元数据。
  1. docker inspect [OPTIONS] NAME|ID [NAME|ID...]
复制代码
  1. -f :指定返回值的模板文件。
  2. -s :显示总的文件大小。
  3. --type :为指定类型返回JSON。
复制代码
  1. # 获取镜像mysql:5.6的元信息
  2. runoob@runoob:~$ docker inspect mysql:5.6
  3. [
  4.     {
  5.         "Id": "sha256:2c0964ec182ae9a045f866bbc2553087f6e42bfc16074a74fb820af235f070ec",
  6.         "RepoTags": [
  7.             "mysql:5.6"
  8.         ],
  9.         "RepoDigests": [],
  10.         "Parent": "",
  11.         "Comment": "",
  12.         "Created": "2016-05-24T04:01:41.168371815Z",
  13.         "Container": "e0924bc460ff97787f34610115e9363e6363b30b8efa406e28eb495ab199ca54",
  14.         "ContainerConfig": {
  15.             "Hostname": "b0cf605c7757",
  16.             "Domainname": "",
  17.             "User": "",
  18.             "AttachStdin": false,
  19.             "AttachStdout": false,
  20.             "AttachStderr": false,
  21.             "ExposedPorts": {
  22.                 "3306/tcp": {}
  23.             },
  24. ...
复制代码
获取正在运行的容器mymysql的 IP。
  1. runoob@runoob:~$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql
  2. 172.17.0.3
复制代码
pull


push
  1. docker push
复制代码

注意 tag 必须是 hub 仓库的用户名,否则报错无权限。

但不保举直接上传镜像,而是考虑安全题目,利用 Dockerfile 文件。即建立 hub 仓库和 GitHub 的映射,只要 GitHub 上有 Dockerfile 就会自动映射到 Dockerhub。
docker search

docker search命令用于在Docker Hub上搜索可以用来构建和运行容器的镜像。可以按照以下格式利用该命令:
  1. docker search [OPTIONS]
  2.         # TERM是需要搜索的关键字
  3.         TERM
复制代码
如:
  1. docker search portainer
复制代码
上面的命令会在Docker Hub上搜索关键字为portainer的镜像,并列出匹配的相干信息,如镜像名称、描述、星级、官方/非官方等。

常用选项:
  1. --filter=STARS=N:表示只列出点赞数大于或等于N的镜像
  2. --filter=IS_OFFICIAL=true|false:表示只列出Docker官方发布的或者非官方发布的镜像
  3. -s, --stars[0]:表示按点赞数排序,默认值为1,即只显示点赞数大于等于1的镜像
  4. --format="{{.Name}}:{{.Description}}":自定义输出格式,例如仅显示镜像名称和描述信息
复制代码
docker search命令不仅能用来搜索公共仓库,还可以搜索私有仓库,只需要在关键字中包含私有仓库所在即可,如:
  1. docker search docker.example.com/mysql
复制代码
由于网络缘故原由,docker search命令可能会存在访问异常或者网络超时等题目。
docker exec

用于在运行中的容器中执行命令。允许你在容器内执行命令,就像在本地计算机一样:

  • 对在运行中的容器中调试应用步伐很有用
  • 或在容器中运行交互式命令行工具
  1. docker exec
  2. # OPTIONS 参数可选,可以用于指定一些选项,例如执行命令的用户、工作目录等
  3.         [OPTIONS]
  4.                 # CONTAINER 参数必需,指定要在其中执行命令的容器
  5.                 CONTAINER
  6.                         # COMMAND 和 ARG 参数也必需,指定要在容器内部执行的命令及其参数
  7.                         COMMAND [ARG...]
复制代码
  1. # 进个 py 项目的容器
  2. docker exec -it image_id /bin/bash
  3. # 查看 Python 的进程
  4. ps -ef | grep python
  5. # 进入容器项目的python
  6. docker exec -it image_id python
  7. # 查看 ip
  8. docker exec -it image_id ip a
  9. [root@service-monitoring ~]# docker exec -it mysql bash
  10. bash-4.2# mysql -u root -p
  11. Enter password:
  12. Welcome to the MySQL monitor.  Commands end with ; or \g.
  13. Your MySQL connection id is 5
  14. Server version: 5.7.42 MySQL Community Server (GPL)
  15. Copyright (c) 2000, 2023, Oracle and/or its affiliates.
  16. Oracle is a registered trademark of Oracle Corporation and/or its
  17. affiliates. Other names may be trademarks of their respective
  18. owners.
  19. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  20. mysql>
复制代码
docker update

更新正在运行的容器的设置信息。可用于更新容器的 CPU、内存、网络、挂载卷等设置信息,而无需制止和重启容器。
  1. docker update [OPTIONS] CONTAINER [CONTAINER...]
  2. --cpu-shares:设置容器使用 CPU 的相对权重。默认为 0,表示与其他容器共享 CPU 时间
  3. --memory:设置容器使用的内存限制。默认为 0,表示不限制内存使用
  4. --restart:设置容器退出后的重启策略。默认为 "no",表示容器退出后不重启
  5. --ulimit:设置容器使用的系统资源限制,如最大打开文件数、最大进程数等
复制代码
如将容器 mycontainer 的 CPU 权重设为 512,内存限制为 1GB,重启策略为 always:
  1. docker update
  2.         --cpu-shares 512
  3.         --memory 1g
  4.         --restart always mycontainer
复制代码
该命令只能更新容器的设置信息,不能更新容器的镜像和文件系统。如果需要更新镜像和文件系统,需要先制止容器,然后利用 docker rm 命令删除容器,再利用 docker run 命令重新创建容器。
5 Docker-Compose

该系列命令须运行在 yaml文件所在目录。否则报错:
  1. [root@javaedge-monitor-platform-dev ~]# docker-compose exec mysql bash
  2. ERROR:
  3.         Can't find a suitable configuration file in this directory or any
  4.         parent. Are you in the right directory?
  5.         Supported filenames: docker-compose.yml, docker-compose.yaml
复制代码
docker compose

docker compose up [-d]
  1. # 使用 docker-compose.yml 文件定义的容器,启动并在后台运行。
  2. docker compose
  3.         # 创建容器并启动
  4.         up
  5.                 # 后台运行方式启动
  6.                 -d
复制代码
容器启动后会不停在后台运行,可通过 docker-compose ps 检察状态。
要制止后台运行的容器,可以利用 docker-compose stop 命令。
6 network

Docker network 相干的常用命令主要包括:

  • docker network create - 创建一个新网络
  • docker network connect - 将容器连接到网络
  • docker network disconnect - 将容器从网络断开
  • docker network rm - 删除指定网络
6.1 docker network ls

列出 Docker 主机上的所有网络,包括网络名称、ID、驱动等信息。
  1. docker network ls
复制代码
6.2 docker network inspect

检察指定网络的详细设置信息。通过 network ID 或 name 指定网络:
  1. docker@minikube:~$ docker network inspect bridge
  2. [
  3.     {
  4.         "Name": "bridge",
  5.         "Id": "675eddaf1c1e76a5c0fe4b56f86831cb7c7d0fc597d766fd7df533cf09e11832",
  6.         "Created": "2023-05-10T15:05:28.409718304Z",
  7.         "Scope": "local",
  8.         "Driver": "bridge",
  9.         "EnableIPv6": false,
  10.         "IPAM": {
  11.             "Driver": "default",
  12.             "Options": null,
  13.             "Config": [
  14.                 {
  15.                     "Subnet": "172.17.0.0/16",
  16.                     "Gateway": "172.17.0.1"
  17.                 }
  18.             ]
  19.         },
  20.         "Internal": false,
  21.         "Attachable": false,
  22.         "Ingress": false,
  23.         "ConfigFrom": {
  24.             "Network": ""
  25.         },
  26.         "ConfigOnly": false,
  27.         "Containers": {},
  28.         "Options": {
  29.             "com.docker.network.bridge.default_bridge": "true",
  30.             "com.docker.network.bridge.enable_icc": "true",
  31.             "com.docker.network.bridge.enable_ip_masquerade": "true",
  32.             "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
  33.             "com.docker.network.bridge.name": "docker0",
  34.             "com.docker.network.driver.mtu": "1500"
  35.         },
  36.         "Labels": {}
  37.     }
  38. ]
  39. docker@minikube:~$
复制代码

  • docker network create创建一个新的 Docker 网络。我们可以指定网络类型、驱动步伐等设置创建定制化网络:
  1. docker network create -d macvlan \
  2.   --subnet=172.16.86.0/24 \
  3.   --gateway=172.16.86.1 \
  4.   -o parent=eth0 pub_net
复制代码

  • docker network connect将一个容器连接到指定网络。需指定网络名称或 ID,以及容器名称或 ID:
  1. docker network connect multi-host-network container1
复制代码

  • docker network disconnect将容器从指定网络断开连接。利用方法与 connect 类似:
  1. docker network disconnect multi-host-network container1
复制代码

  • docker network rm删除指定的 Docker 网络。删除前,确保指定网络下没有任何容器在利用:
  1. docker network rm multi-host-network
复制代码
所以,总结来说,Docker network 命令用于管理 Docker 的网络功能。我们可以创建各种类型的网络,将容器连接或断开网络,以及在需要时删除网络。熟练掌握 Docker 的网络功能和相干命令,可以让我们在利用 Docker 部署应用时,有更高的灵活性和便捷性。得当利用网络可以实现容器间通讯、容器到宿主机通讯等,这在日常开发和运维场景下非常常用。
  1. [root@javaedge-monitor-platform-dev docker]# docker network ls
  2. NETWORK ID     NAME               DRIVER    SCOPE
  3. 64ad1eca60f7   bridge             bridge    local
  4. 4689aefb8f9b   docker_my-bridge   bridge    local
  5. f2f555bed377   host               host      local
  6. d02380dd3da4   none               null      local
  7. [root@javaedge-monitor-platform-dev docker]#
复制代码
7 日志 docker logs

获取容器的日志。
7.1 语法
  1. docker logs [OPTIONS] CONTAINER
复制代码

  • -f : 跟踪日志输出
  • --since :显示某个开始时间的所有日志
  • -t : 显示时间戳
  • --tail :仅列出最新N条容器日志
7.2 实例

跟踪检察容器mynginx的日志输出。
  1. runoob@runoob:~$ docker logs -f mynginx
  2. 192.168.239.1 - - [10/Jul/2016:16:53:33 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
  3. 2016/07/10 16:53:33 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.239.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.239.130", referrer: "http://192.168.239.130/"
  4. 192.168.239.1 - - [10/Jul/2016:16:53:33 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://192.168.239.130/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
  5. 192.168.239.1 - - [10/Jul/2016:16:53:59 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
  6. ...
复制代码
检察容器mynginx从2016年7月1日后的最新10条日志。
  1. docker logs --since="2016-07-01" --tail=10 mynginx
复制代码
7.3 无法查找指定字符串

执行以下命令没有在docker logs的结果中查找字符串,而是会输出了所有的日志
  1. docker logs nginx | grep 127
复制代码
由于管道符仅对stdout有用,如果容器将日志记载到stderr,这种情况就会发生。
办理方案

把stderr重定向到stdout:
  1. docker logs nginx 2>&1 | grep 127
复制代码
另有一种方式,但贫苦:
  1. grep 127 `docker inspect --format={{.LogPath}} nginx`
复制代码
docker-compose可直接利用内置命令:
  1. docker-compose logs nginx | grep 127
复制代码
8 docker scout quickview
  1. docker scout quickview [IMAGE|DIRECTORY|ARCHIVE]
复制代码
docker scout quickview 显示指定image的快速概览。它显示指定image和底子image中漏洞的摘要。如果可用,它还显示底子image的刷新和更新发起。
如果没有指定image,则利用最近构建的image。
支持以下类型的构件:

  • image
  • OCI 布局目录
  • 由 docker save 创建的 Tarball 存档
  • 本地目录或文件
默认情况下,该工具期望一个image引用,如:

  • redis
  • curlimages/curl:7.87.0
  • mcr.microsoft.com/dotnet/runtime:7.0
如要分析的构件是 OCI 目录、Tarball 存档、本地文件或目录,或者如果您想要控制从何处解析图像,须在引用前加上以下之一:

  • image://(默认)利用本地图像,或者回退到注册表查找
  • local:// 利用本地图像存储中的图像(不举行注册表查找)
  • registry:// 利用注册表中的图像(不利用本地图像)
  • oci-dir:// 利用 OCI 布局目录
  • archive:// 利用由 docker save 创建的 Tarball 存档
  • fs:// 利用本地目录或文件
[选项]

选项短格式默认值描述--env环境名称--latest最新索引的图像--orgDocker 构造的定名空间--output-o将陈诉写入文件--platform要分析的图像平台--ref如果提供的 Tarball 包含多个引用,则要利用的引用。仅适用于存档。--stream已弃用,流的名称[示例]
  1. # 对image进行快速概览
  2. $ docker scout quickview nacos/nacos-server:latest
复制代码
  1. # 对最近构建的image进行快速概览
  2. javaedge@JavaEdgedeMac-mini % docker scout qv
  3. INFO New version 1.2.2 available (installed version is 0.20.0)
  4.     ✓ SBOM of image already cached, 450 packages indexed
  5.   Your image  nacos/nacos-server:latest  │    0C     4H    19M    22L
  6.   Base image  centos:7                   │    1C    13H    29M    13L
  7. What's Next?
  8.   Learn more about vulnerabilities → docker scout cves nacos/nacos-server:latest
复制代码
[code]# 分析软件构件的漏洞。如未指定image,则利用最近构建的图像。javaedge@JavaEdgedeMac-mini frp_0.52.3 % docker scout cves nacos/nacos-server:latestINFO New version 1.2.2 available (installed version is 0.20.0)    ✓ Provenance obtained from attestation    ✓ SBOM of image already cached, 450 packages indexed    ✗ Detected 20 vulnerable packages with a total of 44 vulnerabilities   0C     1H     5M     0L  lxml 3.2.1pkg:pypi/lxml@3.2.1    ✗ HIGH CVE-2021-43818 [Improper Neutralization of Special Elements in Output Used by a Downstream Component ('Injection')]      https://scout.docker.com/v/CVE-2021-43818      Affected range :

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表