0


Docker篇(基础命令)

一、启动与停止

详细命令:

  1. # 启动docker:
  2. systemctl start docker
  3. # 停止docker:
  4. systemctl stop docker
  5. # 重启docker:
  6. systemctl restart docker
  7. # 查看docker状态:
  8. systemctl status docker
  9. # 开机启动:
  10. systemctl enable docker
  11. # 查看docker概要信息
  12. docker info
  13. # 查看docker帮助文档
  14. docker --help

注意:systemctl命令是系统服务管理器指令

二、镜像相关的命令

1. 查看镜像

  1. docker images

REPOSITORY:镜像名称

TAG:镜像标签 (默认是可以省略的,也就是latest)

IMAGE ID:镜像ID

CREATED:镜像的创建日期(不是获取该镜像的日期)

SIZE:镜像大小

这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

2. 搜索镜像

如果你需要从网络中查找需要的镜像,可以通过以下命令搜索

docker search 镜像名称

  1. NAME:仓库名称
  2. DESCRIPTION:镜像描述
  3. STARS:用户评价,反应一个镜像的受欢迎程度
  4. OFFICIAL:是否官方
  5. AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

3. 拉取镜像

拉取镜像就是从中央仓库中下载镜像到本地

docker pull 镜像名称

  1. 例如,我要下载centos7镜像
  2. docker pull centos:7
  3. #如果不指定版本号,下载最新版本
  4. docker pull centos
  5. docker pull centos:latest

4. 删除镜像

按镜像ID删除镜像

  1. docker rmi 镜像ID
  2. docker rmi 镜像名称
  3. docker rmi docker images -q 删除所有镜像(谨慎操作)

三、容器创建与启动容器

1. 查看容器

  1. 查看最后一次运行的容器
  2. docker ps -l
  3. 查看运行容器
  4. docker ps
  5. 查看所有容器
  6. docker ps -a
  7. 进入容器
  8. 其中字符串为容器ID:
  9. docker exec -it d27bd3008ad9 /bin/bash
  10. 1.停用全部运行中的容器:
  11. docker stop $(docker ps -q)
  12. 2.删除全部容器:
  13. docker rm $(docker ps -aq)
  14. 3.一条命令实现停用并删除容器:
  15. docker stop $(docker ps -q) & docker rm $(docker ps -aq)

2. 创建容器

创建容器常用的参数说明:

  1. 创建容器命令:docker run
  2. -i:表示运行容器
  3. -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
  4. --name :为创建的容器命名。
  5. -v:表示目录映射关系(前者是宿主机目录,后者是映射到容器上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
  6. -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
  7. -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
交互式方式创建容器

交互式方式创建容器(创建以后就进入到容器内部了)

这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态

  1. docker run -it --name=容器名称 镜像名称:标签 /bin/bash

退出当前容器

  1. exit
守护式方式创建容器

登录守护式容器方式:

  1. docker run -di --name=容器名称 镜像名称:标签
  1. docker exec -it 容器名称 (或者容器ID) /bin/bash

3. 容器启动与停止

  1. #停止容器:
  2. docker stop 容器名称(或者容器ID
  3. # 启动容器:
  4. docker start 容器名称(或者容器ID

四、容器操作命令

1. 文件拷贝

如果我们需要将文件拷贝到容器内可以使用cp命令

docker cp 需要拷贝的文件或目录 容器名称:容器目录

  1. > docker cp hello.txt mynginx:/usr/local
  1. #也可以将文件从容器内拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录

  1. > docker cp mynginx:/usr/local/hello.txt hello.txt

2. 目录(文件)挂载

目录(文件)挂载其实就是修改宿主机的文件,会自动修改容器内部的文件。

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,

这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:

  1. docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7

查看IP

  1. docker inspect [容器名|容器ID]
  2. > docker inspect tomcat
  3. > docker inspect nginx

3. 删除容器

  1. # 删除指定的容器:
  2. docker rm 容器名称(容器ID
  3. # 比如
  4. > docker stop mynginx2
  5. > docker rm mynginx2

注意:

删除容器的时候,一定要先执行停止容器命令。

docker stop 容器名称(容器ID) 然后在执行 docker rm 容器名称(容器ID)

五、docker inspect

1. 功能介绍

  1. docker inspect

会以 json 格式得到 docker 镜像/容器的元数据。

如下,查看mysql镜像的完整元数据:

  1. docker inspect mysql:5.7
  2. [
  3. {
  4. "Id": "sha256:1d7aba9171693947d53f474014821972bf25d72b7d143ce4af4c8d8484623417",
  5. "RepoTags": [
  6. "mysql:5.7"
  7. ],
  8. "RepoDigests": [
  9. "mysql@sha256:d9b934cdf6826629f8d02ea01f28b2c4ddb1ae27c32664b14867324b3e5e1291"
  10. ],
  11. "Parent": "",
  12. "Comment": "",
  13. "Created": "2021-09-03T07:25:25.419696974Z",
  14. "Container": "9979ac05c87381fb984ce556c94ac87ef0b0209eca50e9a0d81d28756557c2ce",
  15. "ContainerConfig": {
  16. "Hostname": "9979ac05c873",
  17. "Domainname": "",
  18. "User": "",
  19. "AttachStdin": false,
  20. "AttachStdout": false,
  21. "AttachStderr": false,
  22. "ExposedPorts": {
  23. "3306/tcp": {},
  24. "33060/tcp": {}
  25. },
  26. "Tty": false,
  27. "OpenStdin": false,
  28. "StdinOnce": false,
  29. "Env": [
  30. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  31. "GOSU_VERSION=1.12",
  32. "MYSQL_MAJOR=5.7",
  33. "MYSQL_VERSION=5.7.35-1debian10"
  34. ],
  35. "Cmd": [
  36. "/bin/sh",
  37. "-c",
  38. "#(nop) ",
  39. "CMD [\"mysqld\"]"
  40. ],
  41. "Image": "sha256:cae8446f5d2e62008d7a1e3bc66ca14ced29fa4c4d0237cf4e6857fd5ca0c18d",
  42. "Volumes": {
  43. "/var/lib/mysql": {}
  44. },
  45. "WorkingDir": "",
  46. "Entrypoint": [
  47. "docker-entrypoint.sh"
  48. ],
  49. "OnBuild": null,
  50. "Labels": {}
  51. },
  52. "DockerVersion": "20.10.7",
  53. "Author": "",
  54. "Config": {
  55. "Hostname": "",
  56. "Domainname": "",
  57. "User": "",
  58. "AttachStdin": false,
  59. "AttachStdout": false,
  60. "AttachStderr": false,
  61. "ExposedPorts": {
  62. "3306/tcp": {},
  63. "33060/tcp": {}
  64. },
  65. "Tty": false,
  66. "OpenStdin": false,
  67. "StdinOnce": false,
  68. "Env": [
  69. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  70. "GOSU_VERSION=1.12",
  71. "MYSQL_MAJOR=5.7",
  72. "MYSQL_VERSION=5.7.35-1debian10"
  73. ],
  74. "Cmd": [
  75. "mysqld"
  76. ],
  77. "Image": "sha256:cae8446f5d2e62008d7a1e3bc66ca14ced29fa4c4d0237cf4e6857fd5ca0c18d",
  78. "Volumes": {
  79. "/var/lib/mysql": {}
  80. },
  81. "WorkingDir": "",
  82. "Entrypoint": [
  83. "docker-entrypoint.sh"
  84. ],
  85. "OnBuild": null,
  86. "Labels": null
  87. },
  88. "Architecture": "amd64",
  89. "Os": "linux",
  90. "Size": 448211969,
  91. "VirtualSize": 448211969,
  92. "GraphDriver": {
  93. "Data": {
  94. "RootDir": "/var/lib/docker/overlay/e96512345b168f8f1f03e341bdc1e305687a8a54eefab1dfd5e21665ee01933a/root"
  95. },
  96. "Name": "overlay"
  97. },
  98. "RootFS": {
  99. "Type": "layers",
  100. "Layers": [
  101. "sha256:d000633a56813933cb0ac5ee3246cf7a4c0205db6290018a169d7cb096581046",
  102. "sha256:731f7c21360385893ff752e1200bf901f7936f973801eb6f10dc81f249920994",
  103. "sha256:b2830993d63aac4a4c4c3cdea0ccae39c14d53e69d82d4a6541b35670431f244",
  104. "sha256:97a2a3481f0d61f26f855842ffb8170680a68659ab724042b3a000941a5a0a4e",
  105. "sha256:35e94dafc854af4a22dd101bc5f6b0b453c91d50ef9893228ae9b41d5fd99226",
  106. "sha256:2eaac5532d4479e5e821f724c854b8bc38527708ff484397b841561e21a8fc9a",
  107. "sha256:89638afc97cdd7709e24a927a87520751464fbb3af9b564e591f0a783b6276fc",
  108. "sha256:71cabb0b234c522858b8398181aac5ff1a98ec6be8ba71c4079a3cb093f6b4de",
  109. "sha256:b09979068448d00f4513f2bb8b5a4e3734bbbddc526ed5205fbd52f442727167",
  110. "sha256:67536a20af848ab1861ea5e5bf336e223a474e7c411bf21761b8b55f40bde9b9",
  111. "sha256:7449e60227868d770c9fd6437a85717bd6d09667e1e066190af887f687c62372"
  112. ]
  113. },
  114. "Metadata": {
  115. "LastTagTime": "0001-01-01T00:00:00Z"
  116. }
  117. }
  118. ]

如下为以mysql:5.7启动的容器的完整元数据:

  1. docker run -itd mysql:5.7 /bin/sh
  2. 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  3. docker inspect 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  4. [
  5. {
  6. "Id": "492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3",
  7. "Created": "2022-06-13T09:01:22.321391083Z",
  8. "Path": "docker-entrypoint.sh",
  9. "Args": [
  10. "/bin/sh"
  11. ],
  12. "State": {
  13. "Status": "running",
  14. "Running": true,
  15. "Paused": false,
  16. "Restarting": false,
  17. "OOMKilled": false,
  18. "Dead": false,
  19. "Pid": 48552,
  20. "ExitCode": 0,
  21. "Error": "",
  22. "StartedAt": "2022-06-13T09:01:22.584406847Z",
  23. "FinishedAt": "0001-01-01T00:00:00Z"
  24. },
  25. "Image": "sha256:1d7aba9171693947d53f474014821972bf25d72b7d143ce4af4c8d8484623417",
  26. "ResolvConfPath": "/var/lib/docker/containers/492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3/resolv.conf",
  27. "HostnamePath": "/var/lib/docker/containers/492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3/hostname",
  28. "HostsPath": "/var/lib/docker/containers/492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3/hosts",
  29. "LogPath": "/var/lib/docker/containers/492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3/492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3-json.log",
  30. "Name": "/silly_antonelli",
  31. "RestartCount": 0,
  32. "Driver": "overlay",
  33. "Platform": "linux",
  34. "MountLabel": "",
  35. "ProcessLabel": "",
  36. "AppArmorProfile": "",
  37. "ExecIDs": null,
  38. "HostConfig": {
  39. "Binds": null,
  40. "ContainerIDFile": "",
  41. "LogConfig": {
  42. "Type": "json-file",
  43. "Config": {
  44. "max-file": "10",
  45. "max-size": "100m"
  46. }
  47. },
  48. "NetworkMode": "default",
  49. "PortBindings": {},
  50. "RestartPolicy": {
  51. "Name": "no",
  52. "MaximumRetryCount": 0
  53. },
  54. "AutoRemove": false,
  55. "VolumeDriver": "",
  56. "VolumesFrom": null,
  57. "CapAdd": null,
  58. "CapDrop": null,
  59. "CgroupnsMode": "host",
  60. "Dns": [],
  61. "DnsOptions": [],
  62. "DnsSearch": [],
  63. "ExtraHosts": null,
  64. "GroupAdd": null,
  65. "IpcMode": "private",
  66. "Cgroup": "",
  67. "Links": null,
  68. "OomScoreAdj": 0,
  69. "PidMode": "",
  70. "Privileged": false,
  71. "PublishAllPorts": false,
  72. "ReadonlyRootfs": false,
  73. "SecurityOpt": null,
  74. "UTSMode": "",
  75. "UsernsMode": "",
  76. "ShmSize": 67108864,
  77. "Runtime": "runc",
  78. "ConsoleSize": [
  79. 0,
  80. 0
  81. ],
  82. "Isolation": "",
  83. "CpuShares": 0,
  84. "Memory": 0,
  85. "NanoCpus": 0,
  86. "CgroupParent": "",
  87. "BlkioWeight": 0,
  88. "BlkioWeightDevice": [],
  89. "BlkioDeviceReadBps": null,
  90. "BlkioDeviceWriteBps": null,
  91. "BlkioDeviceReadIOps": null,
  92. "BlkioDeviceWriteIOps": null,
  93. "CpuPeriod": 0,
  94. "CpuQuota": 0,
  95. "CpuRealtimePeriod": 0,
  96. "CpuRealtimeRuntime": 0,
  97. "CpusetCpus": "",
  98. "CpusetMems": "",
  99. "Devices": [],
  100. "DeviceCgroupRules": null,
  101. "DeviceRequests": null,
  102. "KernelMemory": 0,
  103. "KernelMemoryTCP": 0,
  104. "MemoryReservation": 0,
  105. "MemorySwap": 0,
  106. "MemorySwappiness": null,
  107. "OomKillDisable": false,
  108. "PidsLimit": null,
  109. "Ulimits": [
  110. {
  111. "Name": "NOFILE",
  112. "Hard": 655350,
  113. "Soft": 655350
  114. }
  115. ],
  116. "CpuCount": 0,
  117. "CpuPercent": 0,
  118. "IOMaximumIOps": 0,
  119. "IOMaximumBandwidth": 0,
  120. "MaskedPaths": [
  121. "/proc/asound",
  122. "/proc/acpi",
  123. "/proc/kcore",
  124. "/proc/keys",
  125. "/proc/latency_stats",
  126. "/proc/timer_list",
  127. "/proc/timer_stats",
  128. "/proc/sched_debug",
  129. "/proc/scsi",
  130. "/sys/firmware"
  131. ],
  132. "ReadonlyPaths": [
  133. "/proc/bus",
  134. "/proc/fs",
  135. "/proc/irq",
  136. "/proc/sys",
  137. "/proc/sysrq-trigger"
  138. ]
  139. },
  140. "GraphDriver": {
  141. "Data": {
  142. "LowerDir": "/var/lib/docker/overlay/e96512345b168f8f1f03e341bdc1e305687a8a54eefab1dfd5e21665ee01933a/root",
  143. "MergedDir": "/var/lib/docker/overlay/3fbd4444a83b03d8684acd87e38bcaac658d4e038f6e27aaabc10b20152f1563/merged",
  144. "UpperDir": "/var/lib/docker/overlay/3fbd4444a83b03d8684acd87e38bcaac658d4e038f6e27aaabc10b20152f1563/upper",
  145. "WorkDir": "/var/lib/docker/overlay/3fbd4444a83b03d8684acd87e38bcaac658d4e038f6e27aaabc10b20152f1563/work"
  146. },
  147. "Name": "overlay"
  148. },
  149. "Mounts": [
  150. {
  151. "Type": "volume",
  152. "Name": "cb8a9a3d23814b91df3566e7b14b355cc381aa5719297907a68f6d99a1472294",
  153. "Source": "/var/lib/docker/volumes/cb8a9a3d23814b91df3566e7b14b355cc381aa5719297907a68f6d99a1472294/_data",
  154. "Destination": "/var/lib/mysql",
  155. "Driver": "local",
  156. "Mode": "",
  157. "RW": true,
  158. "Propagation": ""
  159. }
  160. ],
  161. "Config": {
  162. "Hostname": "492c91fb2b8f",
  163. "Domainname": "",
  164. "User": "",
  165. "AttachStdin": false,
  166. "AttachStdout": false,
  167. "AttachStderr": false,
  168. "ExposedPorts": {
  169. "3306/tcp": {},
  170. "33060/tcp": {}
  171. },
  172. "Tty": true,
  173. "OpenStdin": true,
  174. "StdinOnce": false,
  175. "Env": [
  176. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  177. "GOSU_VERSION=1.12",
  178. "MYSQL_MAJOR=5.7",
  179. "MYSQL_VERSION=5.7.35-1debian10"
  180. ],
  181. "Cmd": [
  182. "/bin/sh"
  183. ],
  184. "Image": "mysql:5.7",
  185. "Volumes": {
  186. "/var/lib/mysql": {}
  187. },
  188. "WorkingDir": "",
  189. "Entrypoint": [
  190. "docker-entrypoint.sh"
  191. ],
  192. "OnBuild": null,
  193. "Labels": {}
  194. },
  195. "NetworkSettings": {
  196. "Bridge": "",
  197. "SandboxID": "a2f0fe86422968b0c5e1d0b7e4dd66a742dedfc8b01b56eb30649449969f4f12",
  198. "HairpinMode": false,
  199. "LinkLocalIPv6Address": "",
  200. "LinkLocalIPv6PrefixLen": 0,
  201. "Ports": {
  202. "3306/tcp": null,
  203. "33060/tcp": null
  204. },
  205. "SandboxKey": "/data/docker/exec/netns/a2f0fe864229",
  206. "SecondaryIPAddresses": null,
  207. "SecondaryIPv6Addresses": null,
  208. "EndpointID": "d41dfa3aadb23af2c459845e9ba11e87a13e7d96e170c879b6b14db76d443168",
  209. "Gateway": "172.17.0.1",
  210. "GlobalIPv6Address": "",
  211. "GlobalIPv6PrefixLen": 0,
  212. "IPAddress": "172.17.0.4",
  213. "IPPrefixLen": 16,
  214. "IPv6Gateway": "",
  215. "MacAddress": "02:42:ac:11:00:04",
  216. "Networks": {
  217. "bridge": {
  218. "IPAMConfig": null,
  219. "Links": null,
  220. "Aliases": null,
  221. "NetworkID": "9cbe344a6886a489cd1b3d4cef5befc454d477d4c5ac59756d8bdf579739f20a",
  222. "EndpointID": "d41dfa3aadb23af2c459845e9ba11e87a13e7d96e170c879b6b14db76d443168",
  223. "Gateway": "172.17.0.1",
  224. "IPAddress": "172.17.0.4",
  225. "IPPrefixLen": 16,
  226. "IPv6Gateway": "",
  227. "GlobalIPv6Address": "",
  228. "GlobalIPv6PrefixLen": 0,
  229. "MacAddress": "02:42:ac:11:00:04",
  230. "DriverOpts": null
  231. }
  232. }
  233. }
  234. }
  235. ]

2. 参数说明

2.1.
  1. -f

通常我们需要获取某一个具体的key,会用grep,如下,grep会获取到其他的数据,不够完整或者有冗

余,还得进一步处理,但是 -f 可以解决这个问题:

  1. docker inspect mysql:5.7 | grep Layers
  2. "Layers": [
  3. docker inspect mysql:5.7 | grep -A 30 Layers
  4. "Layers": [
  5. "sha256:d000633a56813933cb0ac5ee3246cf7a4c0205db6290018a169d7cb096581046",
  6. "sha256:731f7c21360385893ff752e1200bf901f7936f973801eb6f10dc81f249920994",
  7. "sha256:b2830993d63aac4a4c4c3cdea0ccae39c14d53e69d82d4a6541b35670431f244",
  8. "sha256:97a2a3481f0d61f26f855842ffb8170680a68659ab724042b3a000941a5a0a4e",
  9. "sha256:35e94dafc854af4a22dd101bc5f6b0b453c91d50ef9893228ae9b41d5fd99226",
  10. "sha256:2eaac5532d4479e5e821f724c854b8bc38527708ff484397b841561e21a8fc9a",
  11. "sha256:89638afc97cdd7709e24a927a87520751464fbb3af9b564e591f0a783b6276fc",
  12. "sha256:71cabb0b234c522858b8398181aac5ff1a98ec6be8ba71c4079a3cb093f6b4de",
  13. "sha256:b09979068448d00f4513f2bb8b5a4e3734bbbddc526ed5205fbd52f442727167",
  14. "sha256:67536a20af848ab1861ea5e5bf336e223a474e7c411bf21761b8b55f40bde9b9",
  15. "sha256:7449e60227868d770c9fd6437a85717bd6d09667e1e066190af887f687c62372"
  16. ]
  17. },
  18. "Metadata": {
  19. "LastTagTime": "0001-01-01T00:00:00Z"
  20. }
  21. }
  22. ]
  1. docker inspect -f '{{.RootFS.Layers}}' mysql:5.7
  2. [sha256:d000633a56813933cb0ac5ee3246cf7a4c0205db6290018a169d7cb096581046 sha256:731f7c21360385893ff752e1200bf901f7936f973801eb6f10dc81f249920994 sha256:b2830993d63aac4a4c4c3cdea0ccae39c14d53e69d82d4a6541b35670431f244 sha256:97a2a3481f0d61f26f855842ffb8170680a68659ab724042b3a000941a5a0a4e sha256:35e94dafc854af4a22dd101bc5f6b0b453c91d50ef9893228ae9b41d5fd99226 sha256:2eaac5532d4479e5e821f724c854b8bc38527708ff484397b841561e21a8fc9a sha256:89638afc97cdd7709e24a927a87520751464fbb3af9b564e591f0a783b6276fc sha256:71cabb0b234c522858b8398181aac5ff1a98ec6be8ba71c4079a3cb093f6b4de sha256:b09979068448d00f4513f2bb8b5a4e3734bbbddc526ed5205fbd52f442727167 sha256:67536a20af848ab1861ea5e5bf336e223a474e7c411bf21761b8b55f40bde9b9 sha256:7449e60227868d770c9fd6437a85717bd6d09667e1e066190af887f687c62372]
  3. # 格式要求
  4. '{{.一级key值.二级key值}}'
  5. # 容器同样适用
  6. docker inspect -f '{{.Config.Env}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  7. [PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin GOSU_VERSION=1.12 MYSQL_MAJOR=5.7 MYSQL_VERSION=5.7.35-1debian10]
2.2.
  1. --type

指定具体类型 如:–type container 声明查看容器的元数据

  1. docker inspect --type container 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. [
  3. {
  4. "Id": "492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3",
  5. "Created": "2022-06-13T09:01:22.321391083Z",
  6. "Path": "docker-entrypoint.sh",
  7. "Args": [
  8. "/bin/sh"
  9. ],
  10. "State": {
  11. "Status": "running",
  12. "Running": true,
  13. "Paused": false,
  14. "Restarting": false,
  15. "OOMKilled": false,
  16. "Dead": false,
  17. "Pid": 48552,
  18. "ExitCode": 0,
  19. "Error": "",
  20. "StartedAt": "2022-06-13T09:01:22.584406847Z",
  21. "FinishedAt": "0001-01-01T00:00:00Z"
  22. },
  23. ...
  1. docker inspect --type image mysql:5.7
  2. [
  3. {
  4. "Id": "sha256:1d7aba9171693947d53f474014821972bf25d72b7d143ce4af4c8d8484623417",
  5. "RepoTags": [
  6. "mysql:5.7"
  7. ],
  8. "RepoDigests": [
  9. "mysql@sha256:d9b934cdf6826629f8d02ea01f28b2c4ddb1ae27c32664b14867324b3e5e1291"
  10. ],
  11. "Parent": "",
  12. "Comment": "",
  13. "Created": "2021-09-03T07:25:25.419696974Z",
  14. "Container": "9979ac05c87381fb984ce556c94ac87ef0b0209eca50e9a0d81d28756557c2ce",
  15. "ContainerConfig": {
  16. "Hostname": "9979ac05c873",
  17. "Domainname": "",
  18. "User": "",
  19. "AttachStdin": false,
  20. "AttachStdout": false,
  21. "AttachStderr": false,
  22. "ExposedPorts": {
  23. "3306/tcp": {},
  24. "33060/tcp": {}
  25. },
  26. ...
2.3.
  1. -s

显示总的文件大小

  1. docker inspect -s 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3 | grep Size
  2. "ShmSize": 67108864,
  3. "ConsoleSize": [
  4. "SizeRw": 37,
  5. "SizeRootFs": 448212006,
  6. docker inspect 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3 | grep Size
  7. "ShmSize": 67108864,
  8. "ConsoleSize": [

3. docker inspect -f 更多用法

简单地说,-f 的实参是个 Go 模版,并在容器/镜像的元数据上以该 Go 模版作为输入,最终返回模版指定的数

据。Go 模版是一种模板引擎,让数据以指定的模式输出。这个概念对于 Web 开发者是非常熟悉的,Web 领域有

很多模版引擎,比如 Jinga2(用于 Python 和 Flask)、Mustache、JSP 等等,看下面的简单示例:

  1. docker inspect -f "The image's repotags is {{.RepoTags}}" mysql:5.7
  2. The image's repotags is [mysql:5.7]
3.1. Go 模版 详解

模版指令

{{ }} 语法用于处理模版指令,大括号外的任何字符都将直接输出。

上下文

“.” 表示“当前上下文”。大多数情况下表示了容器元数据的整个数据结构,但在某些情况下可以重新规

定上下文,比如使用 with 函数:

  1. docker inspect -f '{{.State.Pid}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. 48552
  3. docker inspect -f '{{with .State}} {{.Pid}} {{end}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  4. 48552

可以使用 $ 来获取根上下文,只能获取一级key值

  1. docker inspect -f '{{$.Name}} has pid {{with .State}} {{.Pid}} {{end}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. /silly_antonelli has pid 48552

注意,单独使用 “.” 本身也是可以的,将输出未格式化的完整元数据:

3.2. 数据类型

inspect 数据可以由浮点数、字符串和布尔组成,可以使用 Go 模版内置函数进行比较判断。虽然 Go 模版

支持整数,但目前 inspect 数据中的数值类型都是浮点数,而整数应该对于大多数场景更方便(详见该

Issue)。使用字符串时可以使用双引号。

数据中不存在的值是不可以用来比较的:

  1. docker inspect -f '{{.ExecIDs}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. []
  3. docker inspect 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3 | grep ExecIDs
  4. "ExecIDs": null,
  5. docker inspect -f '{{eq .ExecIDs .ExecIDs}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  6. Template parsing error: template: :1:2: executing "" at <eq .ExecIDs .ExecIDs>: error calling eq: invalid type for comparison
3.3. 数据结构

inspect 数据使用 map 以及数组保存。Map 结构可以通过 . 的链式来访问 map 内部数据:

  1. docker inspect -f '{{.State.ExitCode}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. 0

1、如果需要获取的属性名称包含 “/”(比如下列示例数据)或者以数字开头,则不能直接通过级联调用

获取信息。因为属性名称中的点号会被解析成级联信息,进而导致返回错误结果。即便使用引号将其包含

也会提示语法格式错误。此时,需要通过 index 来读取指定属性信息。前面卷的例子可以这样写:

  1. docker inspect -f '{{.Config.Volumes./var/lib/mysql}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. Template parsing error: template: :1: bad character U+002F '/'
  3. # 双引号也不行
  4. docker inspect -f '{{.NetworkSettings.Ports.3306/tcp}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  5. Template parsing error: template: :1: unexpected ".3306" in operand
  6. #docker inspect -f '{{.NetworkSettings.Ports."3306/tcp"}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  7. Template parsing error: template: :1: bad character U+0022 '"'
  8. # 正确写法 !!!注意 index 与之后的数据之间包含空格,与之后双引号括起来的也有空格,否则报错
  9. docker inspect -f '{{index .NetworkSettings.Ports "3306/tcp"}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  10. <no value>
  11. docker inspect -f '{{index .Config.Volumes "/var/lib/mysql"}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  12. {}
  13. #报错如下
  14. docker inspect -f '{{index.NetworkSettings.Ports "3306/tcp"}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  15. Template parsing error: template: :1:2: executing "" at <index>: wrong number of args for index: want at least 1 got 0

2、如果返回结果是一个 map, slice, array 或 string,则可以使用 index 加索引序号(从零开始计数)来

读取属性值

  1. docker inspect -f '{{.HostConfig.ReadonlyPaths}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. [/proc/bus /proc/fs /proc/irq /proc/sys /proc/sysrq-trigger]
  3. docker inspect -f '{{index .HostConfig.ReadonlyPaths 0}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  4. /proc/bus
  5. # 另一种类型,包含多个键值对的获取
  6. 想要获取EndpointID的值:
  7. "NetworkSettings": {
  8. "Bridge": "",
  9. "SandboxID": "a2f0fe86422968b0c5e1d0b7e4dd66a742dedfc8b01b56eb30649449969f4f12",
  10. "HairpinMode": false,
  11. "LinkLocalIPv6Address": "",
  12. "LinkLocalIPv6PrefixLen": 0,
  13. "Ports": {
  14. "3306/tcp": null,
  15. "33060/tcp": null
  16. },
  17. "SandboxKey": "/data/docker/exec/netns/a2f0fe864229",
  18. "SecondaryIPAddresses": null,
  19. "SecondaryIPv6Addresses": null,
  20. "EndpointID": "d41dfa3aadb23af2c459845e9ba11e87a13e7d96e170c879b6b14db76d443168",
  21. "Gateway": "172.17.0.1",
  22. "GlobalIPv6Address": "",
  23. "GlobalIPv6PrefixLen": 0,
  24. "IPAddress": "172.17.0.4",
  25. "IPPrefixLen": 16,
  26. "IPv6Gateway": "",
  27. "MacAddress": "02:42:ac:11:00:04",
  28. "Networks": {
  29. "bridge": {
  30. "IPAMConfig": null,
  31. "Links": null,
  32. "Aliases": null,
  33. "NetworkID": "9cbe344a6886a489cd1b3d4cef5befc454d477d4c5ac59756d8bdf579739f20a",
  34. "EndpointID": "d41dfa3aadb23af2c459845e9ba11e87a13e7d96e170c879b6b14db76d443168",
  35. "Gateway": "172.17.0.1",
  36. "IPAddress": "172.17.0.4",
  37. "IPPrefixLen": 16,
  38. "IPv6Gateway": "",
  39. "GlobalIPv6Address": "",
  40. "GlobalIPv6PrefixLen": 0,
  41. "MacAddress": "02:42:ac:11:00:04",
  42. "DriverOpts": null
  43. }
  44. }
  45. }
  46. docker inspect -f '{{index .NetworkSettings.Networks.bridge 4}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  47. Template parsing error: template: :1:2: executing "" at <index .NetworkSettings.Networks.bridge 4>: error calling index: value has type int; should be string
  48. docker inspect -f '{{index .NetworkSettings.Networks.bridge "4"}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  49. <no value>
  50. docker inspect -f '{{index .NetworkSettings.Networks.bridge "EndpointID"}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  51. d41dfa3aadb23af2c459845e9ba11e87a13e7d96e170c879b6b14db76d443168
3.4. 函数

除了 index 函数,其他很多函数也很常用。比如逻辑函数 and、or 可以返回布尔结果。

注意,函数是不能放在中间:

  1. docker inspect -f '{{true and true}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. Template parsing error: template: :1:2: executing "" at <true>: can't give argument to non-function true
  3. docker inspect -f '{{and true true}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  4. true

下面是一些常用的比较函数:

  1. eq (等于)
  2. ne (不等于)
  3. lt (小于)
  4. le (小于等于)
  5. gt (大于)
  6. ge (大于等于)

我们可以用这些函数来比较字符串、浮点数或整数:

  1. docker inspect -f '{{and true true}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. true
  3. docker inspect -f '{{eq "abc" "abc"}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  4. true
  5. docker inspect -f '{{ge 1 3}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  6. false
  7. docker inspect -f '{{lt 4.5 4.6}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  8. true
  9. docker inspect -f '{{ne 4.5 4.5}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  10. false

要注意的是操作数类型必须匹配,数字比较时也需要类型匹配:

  1. docker inspect -f '{{ne 4 4.5}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. Template parsing error: template: :1:2: executing "" at <ne 4 4.5>: error calling ne: incompatible types for comparison
  3. docker inspect -f '{{lt 4.5 4.6}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  4. true
  5. docker inspect -f '{{gt .State.Pid 1}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  6. true
  7. docker inspect -f '{{gt .State.Pid 1.0}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  8. Template parsing error: template: :1:2: executing "" at <gt .State.Pid 1.0>: error calling gt: incompatible types for comparison

比较特殊的是,它支持多个参数进行与比较,此时,它会将第一个参数和其余参数依次比较,返回下式的

结果:

  1. {{if eq true .Var1 .Var2 .Var3}}{{end}}
  2. # 效果等同于:
  3. arg1==arg2 || arg1==arg3 || arg1==arg4

另外,可以使用 json 函数来生成 JSON 输出:

  1. docker inspect -f '{{json .NetworkSettings.Ports}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. {"3306/tcp":null,"33060/tcp":null}
3.5. if 语句

条件语句 if 可以和前面的比较函数一起使用:

  1. docker inspect -f '{{if eq .State.ExitCode 0}} Normal Exit {{else if eq .State.ExitCode 1}} Not a Normal Exit {{else}} Still Not a Normal Exit {{end}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  2. Normal Exit

优化显示后为:

  1. $ docker inspect -f '{{if eq .State.ExitCode 0}}
  2. Normal Exit
  3. {{else if eq .State.ExitCode 1}}
  4. Not a Normal Exit
  5. {{else}}
  6. Still Not a Normal Exit
  7. {{end}}' 492c91fb2b8ff1a334fcd64ba3e46585701e7e5809f564bc2c65f3a655458db3
  8. Normal Exit //假设ExitCode为0时的结果

注意,{{end}} 语句必须有,else if 和 else 按需使用。

3.6. range迭代数据

range 用于遍历结构内返回值的所有数据。支持的类型包括 array, slice, map 和 channel。

使用要点:

  1. 对应的值长度为 0 时,range 不会执行。
  2. 结构内部如要使用外部的变量,需要在前面加 引用,比如Var2
  3. range 也支持 else 操作。效果是:当返回值为空或长度为 0 时执行 else 内的内容。
  1. {{range pipeline}}{{.}}{{end}}
  2. {{range pipeline}}{{.}}{{else}}{{.}}{{end}}
  3. * 查看容器网络下已挂载的所有容器名称,如果没有挂载任何容器,则输出 "With No Containers"
  4. docker inspect --format '{{range .Containers}}{{.Name}}{{println}}{{else}}With No Containers{{end}}' bridge
  5. brtest
  6. peaceful_brown
  7. test
  8. docker inspect --format '{{range .Containers}}{{.Name}}{{println}}{{else}}With No Containers{{end}}' none
  9. With No Containers
  10. 1234567891011
3.7. 打印信息

docker --format 默认调用 go语言的 print 函数对模板中的字符串进行输出。

而 go语言还有另外几种相似的内置函数,对比说明如下:

  1. print 将传入的对象转换为字符串并写入到标准输出中。如果后跟多个参数,输出结果之间会自动填充空格进行分隔。
  2. println: 功能和 print 类似,但会在结尾添加一个换行符。也可以直接使用 {{println}} 来换行。
  3. printf: shell 等环境一致,可配合占位符用于格式化输出。
  1. docker inspect --format '{{.State.Pid}}{{.State.ExitCode}}' $INSTANCE_ID
  2. 240390
  3. docker inspect --format '{{print .State.Pid .State.ExitCode}}' $INSTANCE_ID
  4. 24039 0
  5. docker inspect --format '{{.State.Pid}}{{println " 从这换行"}}{{.State.ExitCode}}' $INSTANCE_ID
  6. 24039 从这换行
  7. 0
  8. docker inspect --format '{{printf "Pid:%d ExitCode:%d" .State.Pid .State.ExitCode}}' $INSTANCE_ID
  9. Pid:24039 ExitCode:0
  10. 123456789101112
3.8. 管道

管道 即 pipeline ,与 shell 中类似,可以是上下文的变量输出,也可以是函数通过管道传递的返回值。

  1. {{.Con | markdown | addlinks}}
  2. {{.Name | printf "%s"}}
3.9. Docker内置函数
json

Docker 默认以字符串显示返回结果。而该函数可以将结果格式化为压缩后的 json 格式数据。

  1. # 获取 Config 字段对应的 json 数据
  2. docker inspect --format='{{json .Config}}' $INSTANCE_ID
join

用指定的字符串将返回结果连接后一起展示。操作对象必须是字符串数组

  1. # 输出容器配置的所有 Entrypoint 参数,以 " , " 分隔:
  2. docker inspect --format '{{join .Config.Entrypoint " , "}}' $INSTANCE_ID
lower

将返回结果中的字母全部转换为小写。操作对象必须是字符串。

  1. docker inspect --format "{{lower .Name}}" $INSTANCE_ID
upper

将返回结果中的字母全部转换为大写。操作对象必须是字符串。

  1. docker inspect --format "{{lower .Name}}" $INSTANCE_ID
title

将返回结果的首字母转换为大写。操作对象必须是字符串,而且不能是纯数字。

  1. docker inspect --format "{{title .State.Status}}" $INSTANCE_ID
split

使用指定分隔符将返回结果拆分为字符串列表。操作对象必须是字符串且不能是纯数字。

同时,字符串中必须包含相应的分隔符,否则会直接忽略操作。

  1. docker inspect --format '{{split .HostsPath "/"}}' $INSTANCE_ID
3.10. 常用docker inspect --format 输出示例
  1. $ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 2ed603e52896 172.16.60.214:5000/nginx "/bin/sh -c '/usr/..." 13 minutes ago Up 13 minutes docker-test111
  4. 24e6607534f1 172.16.60.214:5000/nginx "/bin/sh -c '/usr/..." 13 minutes ago Up 13 minutes docker-test11
  5. 19be6b264b6e 172.16.60.214:5000/nginx "/bin/sh -c '/usr/..." 13 minutes ago Up 13 minutes docker-test1
  6. 1) 获取容器的IP (后面使用容器名或容器ID都可以)
  7. $ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
  8. 192.10.160.193
  9. 173.20.19.128
  10. 17.16.10.128
  11. $ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker-test1
  12. 17.16.10.128
  13. 2) 获取容器的MAC地址
  14. $ docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $(docker ps -a -q)
  15. ee:ee:ee:ee:ee:ee
  16. ee:ee:ee:ee:ee:ee
  17. ee:ee:ee:ee:ee:ee
  18. [root@node1 ~]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' docker-test1
  19. ee:ee:ee:ee:ee:ee
  20. 3) 获取容器Name
  21. $ docker inspect --format='{{.Name}}' $(docker ps -aq)
  22. /docker-test111
  23. /docker-test11
  24. /docker-test1
  25. /calico-node
  26. $ docker inspect --format='{{.Name}}' $(docker ps -aq)|cut -d"/" -f2
  27. docker-test111
  28. docker-test11
  29. docker-test1
  30. $ docker inspect --format='{{.Name}}' docker-test1
  31. /docker-test1
  32. $ docker inspect --format='{{.Name}}' docker-test1|cut -d"/" -f2
  33. docker-test1
  34. 4) 获取容器Hostname
  35. $ docker inspect --format '{{ .Config.Hostname }}' $(docker ps -q)
  36. 2ed603e52896
  37. 24e6607534f1
  38. 19be6b264b6e
  39. $ docker inspect --format '{{ .Config.Hostname }}' docker-test1
  40. 19be6b264b6e
  41. 5) Hostname Name IP
  42. $ docker inspect --format 'Hostname:{{ .Config.Hostname }} Name:{{.Name}} IP:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
  43. Hostname:2ed603e52896 Name:/docker-test111 IP:192.10.160.193
  44. Hostname:24e6607534f1 Name:/docker-test11 IP:173.20.19.128
  45. Hostname:19be6b264b6e Name:/docker-test1 IP:17.16.10.128
  46. $ docker inspect --format 'Hostname:{{ .Config.Hostname }} Name:{{.Name}} IP:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker-test1
  47. Hostname:19be6b264b6e Name:/docker-test1 IP:17.16.10.128
  48. 6) 获取容器的log path
  49. $ docker inspect --format='{{.LogPath}}' `docker ps -a -q`
  50. $ docker inspect --format='{{.LogPath}}' docker-test1
  51. 7) 获取容器的image镜像名称
  52. $ docker inspect --format='{{.Config.Image}}' `docker ps -a -q`
  53. 172.16.60.214:5000/nginx
  54. 172.16.60.214:5000/nginx
  55. 172.16.60.214:5000/nginx
  56. quay.io/calico/node:v2.6.10
  57. $ docker inspect --format='{{.Config.Image}}' docker-test1
  58. 172.16.60.214:5000/nginx
  59. 8) 获取容器绑定的端口(port bindings)
  60. $ docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' `docker ps -a -q`
  61. $ docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' docker-test1
  62. 9) 获取service实例的Ip
  63. $ docker service ps my-test
  64. ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
  65. t71gqufekv2o my-test.1 172.16.60.214:5000/nginx:latest swarm-node2 Running Running 16 seconds ago
  66. 9cuq2yf10d60 my-test.2 172.16.60.214:5000/nginx:latest swarm-manager-node Running Running 16 seconds ago
  67. srt2yo817kpv my-test.3 172.16.60.214:5000/nginx:latest swarm-node1 Running Running 16 seconds ago
  68. $ docker inspect ` docker service ps my-test -q` --format '{{range .NetworksAttachments}}{{.Addresses}}{{end}}' | cut -d '[' -f2|cut -d ']' -f1
  69. 10.255.0.7/16
  70. 10.255.0.8/16
  71. 10.255.0.9/16
  72. 10) 获取service示例的container ID (获取的是ID的全称,一般只要取ID前面12个字符就可以了)
  73. $ docker inspect ` docker service ps my-test -q` --format '{{ .Status.ContainerStatus.ContainerID }}'
  74. c6c18a74a465163757fe928fec9e633223200f92d1c59e5d2d77eabfaa5ae93a
  75. 5f558bb014ea3d3eef5c8d4bd70e2e3048d7fc6725538303be960ac658d93b32
  76. dde578bf60190a63ed5c8c4a9f5a3044566a159e8debe8717342e263c6199f26

4. 参考文档

1、Docker教程小白实操入门(19)--如何通过inspect指令查看数据卷的信息_docker inspect --type container-CSDN博客

2、docker inspect -f 详解(查询在主机上的进程pid)-CSDN博客

3、https://ld246.com/article/1427784659823

六、容器服务日志

1. 简介

查看docker日志通常会使用到docker log指令,可以通过指令docker help logs来查看docker log提供

的功能:

Options(可选参数):

–details 显示更多详细的信息

-f, --follow 跟踪实时日志

–since string 显示自某个(时间)timestamp之后的日志,或相对时间,如42m(即42分钟)

–tail string 显示日志末尾后N行, 默认是全部显示

-t, --timestamps 在每行日志前加上timestamp(时间戳)

–until string 显示日志某个时间戳之前的日志,或相对时间,如42m(即42分钟)

2. 常用命令

docker log 提供了根据时间或者时间段查询日志,以及根据某个关键字查询日志的功能,

以下将举例常用日志查看命令:

查看docker容器

docker ps : 列出容器

OPTIONS说明:

  • -a :显示所有的容器,包括未运行的。
  • -f :根据条件过滤显示的内容。
  • –format :指定返回值的模板文件。
  • -l :显示最近创建的容器。
  • -n :列出最近创建的n个容器。
  • –no-trunc :不截断输出。
  • -q :静默模式,只显示容器编号。
  • -s :显示总的文件大小。
查看容器日志(全部)
  1. docker logs -f 容器ID
查看容器日志,只显示最后100行
  1. docker logs --tail 100 容器ID
查看容器最近三十分钟的日志
  1. docker logs --since 30m 容器ID
查看容器某个时间之后的日志

这里演示的是查询2023年3月3日上午10点13分58秒后的日志

  1. docker logs --since 2023-03-03T10:13:58.655 容器ID
查看容器某个时间段的日志
  1. docker logs --since 2023-03-03T10:13:58.655 --until 2023-03-03T10:13:58.880 容器ID
查看容器日志并显示时间戳
  1. docker logs -t 容器ID
查看容器日志某个时间最近的日志

这里演示的是十天内最新的十行日志信息
docker logs --tail 10 --since 240h 容器

将容器日志写入到文件

这里演示的是将指定容器最后100日志写入error文件中

  1. docker logs --tail 100 容器ID>>error.log
根据某个关键字查询日志

这里演示的是根据error关键字查询日志

  1. docker logs 容器ID | grep error
查询容器某个时间段的日志,并且根据关键字进行查询

这里演示查看容器在2023年3月3日上午10点13分58秒665到880的日志,并根据关键字’

Tomcat started on port’进行筛选

  1. docker logs --since 2023-03-03T10:13:58.655 --until 2023-03-03T10:13:58.880 容器ID | grep Tomcat
  2. started on port
标签: docker eureka 容器

本文转载自: https://blog.csdn.net/qq_51226710/article/details/143443739
版权归原作者 W哥教你学后端 所有, 如有侵权,请联系我们删除。

“Docker篇(基础命令)”的评论:

还没有评论