Docker-常用命令
Docker-Commands
Command-line reference
https://docs.docker.com/engine/reference/commandline/cli/
docker info 查看docker信息
# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.06.1-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: nvidia runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-514.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 24
Total Memory: 251.6GiB
Name: myapp
ID: UF76:IPSA:VE7G:YD67:PQRT:WU4E:3EKX:2J7F:36PQ:BSOT:N2CV:XMFX
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
查看 Root Dir
$ docker info |grep "Docker Root Dir"
Docker Root Dir: /var/lib/docker
查看 docker 的 cgroup driver
$ docker info |grep Cgroup
Cgroup Driver: cgroupfs
docker system df 查看docker磁盘占用
https://docs.docker.com/engine/reference/commandline/system_df/
docker system df
查看 docker 磁盘占用汇总信息
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 433 42 117.4GB 97.11GB (82%)
Containers 103 89 2.145GB 1.464GB (68%)
Local Volumes 9 6 116B 58B (50%)
Build Cache 0 0 0B 0B
RECLAIMABLE 是空闲镜像(没有任何容器使用的镜像)的大小,空闲镜像可以用命令 docker image prune -a
清理
查看docker容器占用磁盘空间大小
docker system df 加 -v 参数显示详细的磁盘占用信息,能看到每个镜像、容器、卷的磁盘占用情况:
$ docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
blog latest 3fc20337e23a 3 hours ago 975MB 0B 975MB 1
elasticsearch 8.6.1-ik b1e6c57fe659 5 months ago 1.297GB 0B 1.297GB 1
gogs/gogs latest ead46421307d 3 years ago 92.38MB 0B 92.38MB 1
nginx alpine 377c0837328f 3 years ago 19.72MB 0B 19.72MB 1
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
a7faa3438b30 blog "java -jar /blog-ser…" 1 0B 3 hours ago Up 3 hours blog
3bd1f9b14c43 nginx:alpine "nginx -g 'daemon of…" 0 2B 7 weeks ago Up 7 weeks nginx
7ee16ad38348 elasticsearch:8.6.1-ik "/bin/tini -- /usr/l…" 0 98.8MB 5 months ago Up 5 months es
f33daa8d3e09 gogs/gogs "/app/gogs/docker/st…" 1 5.57kB 5 months ago Up 5 months gogs
Local Volumes space usage:
VOLUME NAME LINKS SIZE
947b26afba6c51e5d72f83f523a93fe3be7b7b83f32edc62175a8e858585ee12 0 32.77kB
9f10a334ac3293f0e1ebcb880e1947c55017d0d878ba8d40b3925b98e494c9a1 0 32.77kB
58f94b049406ebb796379a43061c9e81f33a309d295beb1e27c50f14a5fec417 1 0B
716a30cd87333e7ee12d0e91cb55ad4a4005db78348c0696cfbd7568246ffab6 1 33.6kB
08d2a5847d3b9e96b595e6efa29fdbe66cb6148eb285066069e17397463e0950 0 32.77kB
317fdf41419fa5ac3ad7330a2c105452065e5d0846920e4ca32e9952790301dd 0 32.77kB
8817b7c05b024d5c03d78f8ce8e5c133ca79d5e79570583135b9d892f7442785 0 0B
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED
docker/containers 目录磁盘占用大清理
1、找到 docker 根目录
docker info |grep “Docker Root Dir”
默认是 /var/lib/docker
2、进入 containers 子目录,里面每个容器对应一个目录,目录名是容器ID,docker ps 结果的第一列就是容器ID的前缀
每个容器目录中有名字为 容器ID-json.log
的日志文件,通常会比较大,可以直接 >contain-id-json.log
清理掉
限制 docker 控制台日志大小
方法1、docker 全剧配置容器日志大小,对所有容器都生效。
新建或修改 docker 配置 /etc/docker/daemon.json
{
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "50m",
"max-file": "5"
},
"data-root": "/data/lib/docker"
}
单个日志文件最大 50m,最多 5 个日志文件,日志自动滚动:
34M e5e0fbde1e9b3ef24bef5228e2381936568f97d7da5b7214f3883f40bc32c809-json.log
48M e5e0fbde1e9b3ef24bef5228e2381936568f97d7da5b7214f3883f40bc32c809-json.log.1
48M e5e0fbde1e9b3ef24bef5228e2381936568f97d7da5b7214f3883f40bc32c809-json.log.2
48M e5e0fbde1e9b3ef24bef5228e2381936568f97d7da5b7214f3883f40bc32c809-json.log.3
48M e5e0fbde1e9b3ef24bef5228e2381936568f97d7da5b7214f3883f40bc32c809-json.log.4
修改后重启docker:
systemctl daemon-reload
systemctl restart docker
方法2,docker run 时限制单个容器的日志大小
通过 --log-opt
指定日志文件大小和数量:
docker run --log-opt max-size=100m --log-opt max-file=5 image-xx
max-size:单个日志文件上限(如 100MB)
max-file:保留的日志文件数量(如最多保留5个)
docker system prune 系统清理
https://docs.docker.com/engine/reference/commandline/system_prune/
docker system prune 会清理
- 已停止的容器
- 悬空镜像
- 没被使用的网络
- docker build 缓存
docker image prune -a 清理悬空镜像
https://docs.docker.com/engine/reference/commandline/image_prune/
docker image prune -a
命令可批量清理悬空镜像
docker images 看到的 none 镜像是悬空镜像(dangling images),即无标签、且不被容器使用的镜像。
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 5eaed6e23874 10 minutes ago 741MB
docker rmi 批量删除none镜像
docker rmi $(docker images | grep "none" | awk '{print $3}')
或者docker images |grep none | awk '{print $3}' | xargs docker rmi
docker search
搜索 DockerHub 上的镜像
docker search zookeeper
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
zookeeper Apache ZooKeeper is an open-source server wh… 1075 [OK]
jplock/zookeeper Builds a docker image for Zookeeper version … 165 [OK]
wurstmeister/zookeeper 145 [OK]
docker network
docker network ls
列出容器网络
docker network create
创建网络时,引擎默认为网络创建一个不重叠的子网。 该子网不是现有网络的细分。 它纯粹用于IP寻址目的。可以覆盖此默认值,并使用–subnet选项直接指定子网络值。 在桥接网络上,只能创建单个子网。
创建网络 br0docker network create --driver=bridge --subnet=192.168.0.0/16 br0
docker run 运行容器
docker run
https://docs.docker.com/engine/reference/commandline/run/
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
以镜像 IMAGE 启动一个容器, 如果 IMAGE 不存在,会从默认仓库 Docker Hub 上下载此镜像,如果不指定 tag 默认是 latest,启动容器后执行命令 COMMAND
参数-d, --detach
让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下-e, --env list
启动容器时增加环境变量-p, --publish <宿主端口>:<容器端口>
映射宿主端口和容器端口,-p
标记可以多次使用来绑定多个端口。例如 -p 80:8080
映射本机 80 端口到容器内的 8080 端口-P, --publish-all
随机映射宿主机上一个 49000~49900 之间的端口到容器内部的网络端口--name string
指定启动的容器的名字--restart string
容器退出后的重启策略,默认是 no
, --restart=always
可保持容器一直运行--rm
容器退出后随之将其删除。默认情况下,为了启动失败时查错,退出的容器并不会立即删除,除非手动 docker rm
。--gpus
指定 NVIDIA GPU 资源-w, --workdir
指定容器内的工作目录
例1、直接运行 ubuntu 镜像并进入启动的 Ubuntu 容器docker run -it --rm ubuntu:18.04 bash
ubuntu:18.04:这是指用 ubuntu:18.04 镜像为基础来启动容器。
bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash
例2、直接运行 jdk8 镜像并进入容器docker run -it adoptopenjdk/openjdk8:centos bash
会直接自动下载 centos+jdk 镜像,run 镜像,并进入容器内
-it
进入容器
-i, --interactive
则让容器的标准输入保持打开,交互式操作-t, --tty
让 Docker 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上-it
这两个参数一起使用,可进入容器执行命令。
-it --user root
以root身份进入容器
docker exec -it --user root <容器名> /bin/bash
以 root 身份进入容器
--network,--net
指定容器网络模式
--network network, --net network
指定容器的网络模式,默认为 bridge
bridge
即桥接网络,以桥接模式连接到宿主机,即宿主机和容器之间通过 docker0 虚拟网卡连到同一个局域网,bridge是默认的网络模式host
宿主网络,即与宿主机共用网络,这种模式相当于没有网络隔离,好处是和宿主机处于同一网络,可随意访问,都不用 -p
做端口映射了。none
则表示无网络,容器将无法联网container:c_name
连接到容器 c_name 的网络network_name
连接到预先创建好的网络 network_name
-v
映射文件/文件夹
-v, --volume [HOST-DIR:]CONTAINER-DIR[:OPTIONS]
在本地(宿主机)和容器间映射目录或文件。
注意此选项中 HOST-DIR 可以省略,但 CONTAINER-DIR 不能省略。如果只有一个目录,会被当做是 CONTAINER-DIR
HOST-DIR 省略时,会自动在本机创建和容器中同名的目录。
映射文件时文件名可以不相同。
如果 HOST-DIR 和 CONTAINER-DIR 都存在,host 上的文件/文件夹内容会覆盖 container 中的文件/文件夹内容。
当映射文件时,宿主机文件必须存在,因为如果不存在会自动在宿主机创建,但此时创建的就是目录了。
CONTAINER-DIR 必须是绝对路径。
HOST-DIR 可以是绝对路径,或者 volume 卷名。HOST-DIR 是绝对路径是,挂载此路径到容器。HOST-DIR 是卷名时,挂载此卷(没有会自动创建 volume)到容器。
挂载目录 -v A:B
时
- 如果容器中目录 B 不存在,会先在 contanier 中创建目录 B,再将本地目录 A 中的所有文件 copy 到 B 中
- 如果本地目录 A 不存在,可自动创建本地目录 A
- 若果 A 和 B 都存在,会用本地目录 A 中的内容覆盖容器目录 B 中的内容
-v
可以出现多次,挂载多个不同的目录。
容器销毁后,启动容器时创建的宿主机目录不会销毁,容器运行过程中对目录的操作也都会保留在宿主机。
Docker volume 挂载时文件或文件夹不存在
https://segmentfault.com/a/1190000015684472
Use volumes
https://docs.docker.com/storage/volumes/
--mount
挂载卷
--mount
挂载本地卷、目录、文件到容器中。由多个键值对组成,由逗号分隔,每一个由 key=value 元祖组成。键值对没有顺序。
type,可以是 bind,volume,tmpfs。
source,主机上的文件或目录的路径。可能用 src,source 指定。
destination,容器中的文件或目录的路径。可能用 destination,dst,target 指定。
使用 -v 和 –volume 绑定主机不存在的文件或目录,将会自动创建。始终创建的是一个目录。
使用 –mount 绑定主机上不存在的文件或目录,则不会自动创建,会产生一个错误。
-u
指定容器的用户和组
-u, --user
指定容器用户,格式 <name|uid>[:<group|gid>]
使用 docker run 启动容器应用的时候,默认使用的是root用户,并且这个 root 用户和宿主机中的 root 是同一个用户,所以容器应用进程具有很高的权限
例如
docker run -u 1000:1000 -it ubuntu bash
docker run -u centos -it centos:7 bash
--privileged
特权模式
大约在 0.6 版,privileged 被引入 docker。
使用该参数,container 内的 root 拥有真正的 root 权限。
否则,container 内的 root 只是外部的一个普通用户权限。
--platform
指定架构
M1 Mac 上运行 amd64/x86_64 架构镜像,可以指定 --platform linux/amd64
参数
docker run -d --rm \
--platform linux/amd64 \
-p 8001:8001 \
--name blog \
-v /var/log/spring:/var/log/spring \
-e "SPRING_PROFILES_ACTIVE=local" \
blog
如果镜像本身是 amd64/x86_64 架构的,不需要指定,但 docker run 会报警告:
WARNING: The requested image’s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
--gpus
指定 NVIDIA GPU 资源
要使用 --gpus
参数,必须满足以下条件:
宿主机已安装 NVIDIA 显卡驱动
已安装 NVIDIA Container Toolkit(原nvidia-docker2)
Docker 版本 19.03 或更高
# 使用所有可用 GPU:
docker run --gpus all <image>
# 指定使用特定数量的 GPU:
docker run --gpus 2 <image> # 使用2个GPU
# 指定使用特定的 GPU 设备:
docker run --gpus '"device=0,1"' <image> # 使用GPU 0和1
# 通过GPU编号指定GPU
docker run --gpus device=GPU-3a23c669-1f69-c64e-cf85-44e9b07e7a2a ubuntu nvidia-smi
docker run --gpus '"device=UUID-GPU-1,UUID-GPU-2"' ubuntu nvidia-smi
还可以通过 gson 指定更复杂的选项:
docker run --gpus '{
"device": ["0", "1"],
"capabilities": ["utility", "compute", "graphics"]
}' <image>
可配置的字段包括:
- device: 指定 GPU 设备 ID 或 UUID
- capabilities: 指定需要的 GPU 功能
- utility: 基本工具功能
- compute: 计算能力
- graphics: 图形渲染能力
- display: 显示功能
- video: 视频处理能力
容器无法启动问题排查
1、docker ps -a 能显示启动失败的容器,然后 docker logs -f 看启动日志有无报错
2、docker inspect 看容器信息
3、如果 docker ps -a 也看不到容器,可以去掉 -d
后台运行参数,前台运行,而是 -it
把容器日志打印到前台,看有什么报错。
docker容器何时变为up状态?
docker 容器启动命令如下:
docker run -itd my-app-image:1.0.0 bash -c "source ~/.bashrc && python3 scripts/start.py && sleep infinity"
启动 docker 容器时发现:start.py 还没执行完成,服务还在初始化,docker ps 里容器状态就已经是 Up
容器变为 up 状态的条件是什么?
Docker 容器的 Up 状态,只表示容器的主进程(PID 1)已经运行,并不代表服务已经准备好或初始化完成。
只要指定的 ENTRYPOINT 或 CMD(即这里的 bash -c ...
命令)被 Docker 启动并进入运行态,容器就会变为 Up。
Docker 并不关心运行的脚本(如 start.py)是否已经初始化完毕,也不管服务 ready 与否。
只要主进程(这里是 bash 进程)没有退出,容器就是 Up。
这个 case 的容器启动流程:
docker run … bash -c “source ~/.bashrc && python3 scripts/start.py && sleep infinity”
Docker 启动 bash 进程(PID 1),执行 source ~/.bashrc && python3 scripts/start.py && sleep infinity
bash 进程一旦开始运行,容器状态就为 Up
无论 start.py 是否完成初始化,Docker 都不做检查
只要 bash 进程没退出(后面加了 sleep infinity,不会退出),容器就一直是 Up
docker push 推镜像
https://docs.docker.com/engine/reference/commandline/push/
推镜像到 registry
docker push image[:tag]
docker image inspect 查看镜像详细信息
https://docs.docker.com/engine/reference/commandline/image_inspect/
docker image inspect 查看镜像的架构
其中 Architecture 是镜像的架构
docker image inspect adoptopenjdk/openjdk8:centos
[
{
"Id": "sha256:5c4f7308100d908ec26e8264a76d76b55591b405a76b581271dbc435c30cfbf2",
"RepoTags": [
"adoptopenjdk/openjdk8:centos"
],
"RepoDigests": [
"adoptopenjdk/openjdk8@sha256:56e00eb7fb3fb82dacb647590c0657534df2eb77605b83e4e706a38151eb082f"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2023-07-01T15:09:31.842619662Z",
"Container": "",
"ContainerConfig": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": null,
"Cmd": null,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=en_US.UTF-8",
"LANGUAGE=en_US:en",
"LC_ALL=en_US.UTF-8",
"JAVA_VERSION=jdk8u372-b07",
"JAVA_HOME=/opt/java/openjdk"
],
"Cmd": [
"/bin/bash"
],
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20201113",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS",
"org.opencontainers.image.created": "2020-11-13 00:00:00+00:00",
"org.opencontainers.image.licenses": "GPL-2.0-only",
"org.opencontainers.image.title": "CentOS Base Image",
"org.opencontainers.image.vendor": "CentOS"
}
},
"Architecture": "arm64",
"Variant": "v8",
"Os": "linux",
"Size": 1268913926,
"VirtualSize": 1268913926,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/f4af2886d00a730fa35c6777754ce4ee11e1481ff22bf052f65933e70643f138/diff:/var/lib/docker/overlay2/5756458d0749a7f71398bf8162286f5cafefe39d499e04b2125662243c86ee56/diff",
"MergedDir": "/var/lib/docker/overlay2/4bccc3a2faf71c2af258c3c7e80743331c5d72e69dc9d27c7a631406526a959c/merged",
"UpperDir": "/var/lib/docker/overlay2/4bccc3a2faf71c2af258c3c7e80743331c5d72e69dc9d27c7a631406526a959c/diff",
"WorkDir": "/var/lib/docker/overlay2/4bccc3a2faf71c2af258c3c7e80743331c5d72e69dc9d27c7a631406526a959c/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:65f23ff12f4df9625427d229db82655bdadd805108d3431520673d79198419ff",
"sha256:010044c2a811335b6122c7a8d972c3e5a4f2a1f68a8253e0af581e3709179706",
"sha256:0ede7ac16aa01ae57ed91a33faffd02eb95b81692791460dc234c68e60588489"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
docker manifest inspect 查看镜像的manifest列表
有的镜像支持多架构,比如 https://hub.docker.com/r/adoptopenjdk/openjdk8/tags?page=1&name=centos
可以通过 docker manifest inspect 查看镜像支持哪些架构
当用户获取一个镜像时,Docker 引擎会首先查找该镜像是否有 manifest 列表,如果有的话 Docker 引擎会按照 Docker 运行环境(系统及架构)查找出对应镜像(例如 golang:alpine)。如果没有的话会直接获取镜像(例如上例中我们构建的 username/test)。
docker manifest inspect adoptopenjdk/openjdk8:centos
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 956,
"digest": "sha256:099e5eda268dc834873028c94eb7031d2acb2dad0ce92edccee78d6fd7666b7b",
"platform": {
"architecture": "arm64",
"os": "linux",
"variant": "v8"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 953,
"digest": "sha256:c185c64ed5993198248bf8aad74e706077b34ee30f7d0260e19c55397ac0f2f2",
"platform": {
"architecture": "arm",
"os": "linux",
"variant": "v7"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 954,
"digest": "sha256:65147bda6f81bfba8922d4c3ae896184551ac5d8fe750e3ba9916846b9eadb91",
"platform": {
"architecture": "ppc64le",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 954,
"digest": "sha256:d2c6b89782cc256d9cef8b4dd72623f7594eb935ba62ba762ddfc17aaace8bbb",
"platform": {
"architecture": "amd64",
"os": "linux"
}
}
]
}
docker pull 下载镜像
https://docs.docker.com/engine/reference/commandline/pull/
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
具体的选项可以通过 docker pull –help 命令看到
Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]
。默认地址是 Docker Hub。
仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>
。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。
例如 docker pull ubuntu:18.04
上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。
而镜像名称是 ubuntu:18.04,因此将会获取官方镜像 library/ubuntu 仓库中标签为 18.04 的镜像。
–platform 指定架构
有的镜像同一 tag 提供多架构的,可通过 –platform 参数指定架构
docker pull adoptopenjdk/openjdk8:centos –platform amd64
docker pull centos:7 –platform linux/amd64
修改docker镜像存储位置
一般默认情况下 docker 镜像的存放位置为 /var/lib/docker
(可通过 docker info
命令查看 Docker Root Dir 配置项), 而此目录一般不会分配很大空间,docker 上跑的东西太多就会发现此目录满了。
注意:Mac 虽然 docker info
看到的 Docker Root Dir 也是 /var/lib/docker
, 但其实镜像并不在这里,而是在$HOME/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
这个单独的文件中,并且无法修改。
解决方法:
软链接
systemctl stop docker # 关闭 docker 服务
mv /var/lib/docker /var/lib/docker.bak # 备份当前 docker 镜像文件目录
ln -s /data/docker /var/lib/docker # 设置软连接,其中 /data/docker 目录为新的存放 docker 镜像目录
cp -rp /var/lib/docker.bak /data/docker # 将旧的 docker 文件拷贝过去
修改 docker 配置文件
指定镜像和容器存放路径的参数是 --graph=/var/lib/docker
,我们只需要修改配置文件指定启动参数即可。
1、修改 /etc/sysconfig/docker 配置文件
添加
OPTIONS=--graph="/root/data/docker" --selinux-enabled -H fd://
2、如果 docker 是 1.12 或以上的版本,可以修改(或新建)/etc/docker/daemon.json
文件。修改后会立即生效,不需重启 docker 服务。
改为
{
"graph": "/data/docker",
"default-shm-size": "64g"
}
修改docker.service服务配置
修改 docker 安装后自动创建的 linux 服务脚本 /etc/systemd/system/docker.service
改为
ExecStart=/usr/bin/dockerd -g /data/docker/ -H fd://
然后 systemctl daemon-reload
重载 unit 配置文件
docker no space left on device
docker 镜像所在磁盘空间不足时 pull image 会报这个错误。
四个修改Docker默认存储位置的方法
https://blog.51cto.com/forangela/1949947
docker images 列出本机镜像
docker image ls
列出镜像,等价于 docker images
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 11 months ago 1.84kB
列表包含了 仓库名、标签、镜像 ID、创建时间 以及 所占用的空间
docker image ls ubuntu
根据仓库名列出镜像docker image ls ubuntu:18.04
指定仓库名和标签列出镜像docker image ls -q
只列出镜像ID,经常用做其他命令的输入参数
docker image rm 删除本地镜像
docker image rm [选项] <镜像1> [<镜像2> ...]
等价于 docker rmi
docker image rm centos
用镜像名,也就是 仓库名:标签,来删除镜像docker image rm $(docker image ls -q redis)
删除所有仓库名为 redis 的镜像docker image rm $(docker image ls -q -f before=mongo:3.2)
删除所有在 mongo:3.2 之前的镜像
docker build 构建镜像
docker build
https://docs.docker.com/engine/reference/commandline/build/
docker build [选项] <上下文路径/URL/->
-t, --tag
指定 image 文件的名字,后面还可以用冒号指定标签,例如 name:tag。如果不指定,默认的标签就是 latest-f, --file
指定 Dockerfile 文件名称,默认是 PATH/Dockerfile
docker build -t myapp .
在当前目录使用 Dockerfile 构建 myapp 镜像docker build -t myapp -f path-to-Dockerfile .
在当前目录使用 path-to-Dockerfile 构建 myapp 镜像
–platform 构建多架构镜像
构建 amd64 架构的镜像
docker build -f devops/blog.Dockerfile --platform=amd64 -t blog .
M1 Mac 上打的镜像默认是arm64架构的
在 M1 Mac 上使用 Docker 构建的镜像架构默认是 arm64(不指定 –platform 参数时)。M1芯片是基于ARM架构的处理器,因此Docker会根据宿主机的架构来构建相应的镜像。
这意味着,在M1 Mac上构建的镜像只能在支持arm64架构的设备上运行,而不能在传统的x86架构设备上运行。
如果 Dockerfile 中指定了特定架构的基础镜像,例如 FROM ubuntu:amd64
,则构建的镜像继承了基础镜像的架构,因此也是 amd64 架构的
构建上下文
docker 构建命令 docker build [选项] <上下文路径/URL/->
最后需要制定上下文目录
当构建的时候,用户会指定构建镜像上下文的路径,docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。这样 Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件。
如果在 Dockerfile 中这么写:COPY ./package.json /app/
这并不是要复制执行 docker build 命令所在的目录下的 package.json,也不是复制 Dockerfile 所在目录下的 package.json, 而是复制 上下文(context) 目录下的 package.json。
一般来说,应该会将 Dockerfile 置于一个空目录下,或者项目根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来。如果目录下有些东西确实不希望构建时传给 Docker 引擎,那么可以用 .gitignore
一样的语法写一个 .dockerignore
,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。
实际上 Dockerfile 的文件名并不要求必须为 Dockerfile,而且并不要求必须位于上下文目录中,比如可以用 -f ../Dockerfile.php 参数指定某个文件作为 Dockerfile。
.dockerignore
.dockerignore
用于剔除不需要作为上下文传递给 Docker 引擎的文件
docker history 查看镜像历史
https://docs.docker.com/engine/reference/commandline/history/
查看镜像历史
--no-trunc
不截断输出结果,不加这个选项的话 CREATED BY 中显示不全
docker history zookeeper:3.4.14
IMAGE CREATED CREATED BY SIZE COMMENT
4b03fe5b3f64 2 months ago /bin/sh -c #(nop) CMD ["zkServer.sh" "start… 0B
<missing> 2 months ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B
<missing> 2 months ago /bin/sh -c #(nop) COPY file:9258d11b841666f1… 1.16kB
<missing> 2 months ago /bin/sh -c #(nop) ENV PATH=/usr/local/openj… 0B
<missing> 2 months ago /bin/sh -c #(nop) EXPOSE 2181 2888 3888 0B
<missing> 2 months ago /bin/sh -c #(nop) VOLUME [/data /datalog /l… 0B
<missing> 2 months ago /bin/sh -c #(nop) WORKDIR /zookeeper-3.4.14 0B
<missing> 2 months ago |2 DISTRO_NAME=zookeeper-3.4.14 GPG_KEY=3F7A… 60MB
<missing> 2 months ago /bin/sh -c #(nop) ARG DISTRO_NAME=zookeeper… 0B
<missing> 2 months ago /bin/sh -c #(nop) ARG GPG_KEY=3F7A1D16FA421… 0B
<missing> 2 months ago /bin/sh -c set -eux; apt-get update; … 12.3MB
<missing> 2 months ago /bin/sh -c set -eux; groupadd -r zookeep… 329kB
<missing> 2 months ago /bin/sh -c #(nop) ENV ZOO_CONF_DIR=/conf ZO… 0B
<missing> 2 months ago /bin/sh -c set -eux; arch="$(dpkg --print-… 109MB
<missing> 2 months ago /bin/sh -c #(nop) ENV JAVA_VERSION=8u292 0B
<missing> 2 months ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B
<missing> 2 months ago /bin/sh -c #(nop) ENV PATH=/usr/local/openj… 0B
<missing> 2 months ago /bin/sh -c { echo '#/bin/sh'; echo 'echo "$J… 27B
<missing> 2 months ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/local/… 0B
<missing> 2 months ago /bin/sh -c set -eux; apt-get update; apt-g… 8.82MB
<missing> 2 months ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:7362e0e50f30ff454… 69.3MB
docker ps 列出本机容器
docker container ls
等于 docker ps
docker ps
列出本机正在运行的容器docker ps -a
列出本机所有容器,包括终止运行的容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5edb883d9423 nginx:alpine "nginx -g 'daemon of…" 10 months ago Up 10 months nginx
e057ebc04ff5 gogs/gogs "/app/gogs/docker/st…" 12 months ago Up 12 months gogs
756930ef3388 search "java -jar /app.jar" 12 months ago Up 12 months search
992185baf34b disqus "java -jar /app.jar" 12 months ago Up 12 months disqus
d89f76910cd6 statistic "java -jar /app.jar" 12 months ago Up 12 months statistic
2dcbb37eb434 eureka "java -jar /app.jar" 12 months ago Up 12 months eureka
docker container start 启动已终止容器
可以利用 docker container start
命令,直接将一个已经终止的容器启动运行。
docker stop 终止容器
docker container stop
等于 docker stop
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker rm 删除容器
docker rm
等于 docker container rm
docker rm [OPTIONS] CONTAINER [CONTAINER...]
如果要删除一个运行中的容器,可以添加 -f
参数。Docker 会发送 SIGKILL 信号给容器。docker rm -f container1
停止并删除容器,相当于 docker stop 再 docker rm
docker exec 进入容器执行命令
docker exec
等于 docker container exec
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
-it
这两个参数一起使用,可进入容器执行命令。
常用格式docker exec -it 容器ID bash
docker exec -it 容器ID sh
先查看当前运行的容器
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
724d51cc7cf7 nginx "nginx -g 'daemon of…" 47 minutes ago Up 47 minutes 0.0.0.0:80->80/tcp mystifying_knuth
指定容器id进入容器
$ docker exec -it 724d51cc7cf7 bash
root@724d51cc7cf7:/#
OCI runtime exec failed bash executable file not found
docker exec -it 33e828194205 bash
OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused “exec: "bash": executable file not found in $PATH”: unknown
原因: 原因是该容器并没有 bash
解决: 改用 shdocker exec -it 33e828194205 sh
docker commit 将容器保存为镜像
当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储层里。而 Docker 提供了一个 docker commit 命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
-a, --author string
指定修改的作者-m, --message string
记录本次修改的内容
例如
$ docker commit \
-a "Tao Wang <twang2218@gmail.com>" \
-m "修改了默认网页" \
webserver \
nginx:v2
其中 -a 指定修改的作者,而 -m 则是记录本次修改的内容,这点和 git 版本控制相似,不过这里这些信息可以省略留空。
docker save 导出镜像
https://docs.docker.com/engine/reference/commandline/save/
保存镜像到 tar 文件,默认输出到 stdout, 默认包含所有的 layer, 所有的tags, 当然也可以指定tags-o, --output
docker save 默认是输出到 stdout, 通过 -o
参数可指定保存的档案文件名
docker save busybox > busybox.tar
保存镜像 busybox 的所有版本到 busybox.tar 文件docker save -o myimage.tar myimage:tag1
保存镜像 myimage 的 tag1 版本到 myimage.tar 文件
利用 docker save/load 导入导出镜像
方法一、利用 gzip/gunzip 压缩解压
导出镜像并压缩为gzipdocker save myimage:latest | gzip > myimage_latest.tar.gz
导出镜像并压缩
倒入镜像压缩包gunzip -c myimage_tag.tar.gz | docker load
方法二、或者使用 tar 命令压缩和解压
docker save myimage:tag > myap.tar
tar -zcvf myap.tar.gz myap.tar
解压导入镜像
tar -xzvf myap.tar.gz
docker load < myap.tar
当然,如果 tar 文件本身不大,不用压缩也可以。
内网下载docker镜像
1、在可以联网的机子上执行 docker pull 命令下载镜像,如: sudo docker pull freewil/bitcoin-testnet-box
,命令使用参考 Docker pull 命令
2、然后运行 docker save 命令将镜像保存为 tar 归档文件,如:docker save -o bitcoin-testnet-box.tar freewil/bitcoin-testnet-box
,命令使用参考Docker save 命令
3、将保存的 bitcoin-testnet-box.tar 归档文件拷贝进内网机器
4、内网机器上执行 dock load 命令加载保存的 tar 归档文件,如:docker load -i bitcoin-testnet-box.tar
docker load 导入镜像
https://docs.docker.com/engine/reference/commandline/load/
从 tar 文件或标准输入 stdin 导入镜像,会重建镜像和所有的 tag.
这里的 tar 文件是用 docker save
命令导出的镜像。--input , -i
: 指定导入的文件,代替 STDIN--quiet , -q
: 精简输出信息。
docker load < busybox.tar.gz
利用输入重定向从 tar 文件导入镜像docker load --input fedora.tar
通过 --input
参数指定 tar 文件导入镜像
docker cp 在容器和宿主机间拷贝文件/目录
https://docs.docker.com/engine/reference/commandline/cp/
docker cp
等于 docker container cp
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
示例
1、将容器中的文件 /root/123.mp4 拷贝到宿主机的 /root/mp4/ 目录中,其中 335d957237c9 是容器id
docker cp 335d957237c9:/root/123.mp4 /root/mp4/
2、将容器中的 /root/images 目录拷贝到宿主机的 /root/data/ 目录中,其中 335d957237c9 是容器id
docker cp 335d957237c9:/root/images /root/data/
3、将宿主机当前目录中的 xx.mp4 文件拷贝到容器的 /root/data/ 目录中,其中 video-processor 是容器名
docker cp xx.mp4 video-processor:/root/data/
docker tag 重命名镜像
https://docs.docker.com/engine/reference/commandline/tag/docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]
重命名镜像,将 source 重命名为 target
docker tag myapp:ver1 myapp:ver2
docker logs 查看容器日志
docker logs [OPTIONS] CONTAINER
如果容器无法启动,先 docker ps -a
找到启动失败的容器id, 然后 docker logs 容器id
查看失败日志
注意为了保留启动失败的容器,不能加 --rm
否则失败后容器文件就被删除了。docker logs -f 容器id
以滚动方式查看容器日志
docker inspect 显示容器信息
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
$ docker inspect blog
[
{
"Id": "1b2a948873a0b44a6553dfee4ab96160195d1d41c10047d08744f9331f370195",
"Created": "2023-08-24T13:24:10.537047009Z",
"Path": "java",
"Args": [
"-jar",
"/blog-server.jar"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 30211,
"ExitCode": 0,
"Error": "",
"StartedAt": "2023-08-24T13:24:10.735225254Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:8a4f3b90771a63fca73de426a882b9e540cdb3e82bb54f5c6828fdd0fcac7019",
"ResolvConfPath": "/var/lib/docker/containers/1b2a948873a0b44a6553dfee4ab96160195d1d41c10047d08744f9331f370195/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/1b2a948873a0b44a6553dfee4ab96160195d1d41c10047d08744f9331f370195/hostname",
"HostsPath": "/var/lib/docker/containers/1b2a948873a0b44a6553dfee4ab96160195d1d41c10047d08744f9331f370195/hosts",
"LogPath": "/var/lib/docker/containers/1b2a948873a0b44a6553dfee4ab96160195d1d41c10047d08744f9331f370195/1b2a948873a0b44a6553dfee4ab96160195d1d41c10047d08744f9331f370195-json.log",
"Name": "/blog",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": [
"/home/centos/git/hexo/source/_posts:/home/centos/git/hexo/source/_posts",
"/var/log/spring:/var/log/spring"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "host",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": true,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Capabilities": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"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,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"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"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/1348860d518c757e7e1ff3c1e6f28c07c19de62d89a7cef4c80ceaad16fe462b-init/diff:/var/lib/docker/overlay2/e8b6a48ed759efa3ae67ecb40263598c0a8b6ee5301462bcc3d83e5e793b1cd2/diff:/var/lib/docker/overlay2/1fa0bf9fa238529796268727234d64c5ae43c0a772777ab5e994e507e0d8941b/diff:/var/lib/docker/overlay2/fe8966ed84314a86ccefe3ba6f82e63e1cf8d26228ac5617e19de5458665a80a/diff:/var/lib/docker/overlay2/02e5f96ab2f2cec701cb9112b46bb70e5f0c9e74e5e2a724209fe877a927ce75/diff:/var/lib/docker/overlay2/1961851b14190d3e33ff7d4da98ebbc6ef15e766381c4d6f33b07b8bfcd640ec/diff:/var/lib/docker/overlay2/71c38e268e4e12d19c1eb6a5f9dac9d368f13e27e38e8cc65fad6d44e0134677/diff:/var/lib/docker/overlay2/a1151919d07928f90f2dfec6cd51f8d481058a9d89a4a85119f6a507ee606f8a/diff:/var/lib/docker/overlay2/bf2ff9aa57906946d9b64e98f7868a098384e9b1eb6a7847dd0b39553be7350e/diff:/var/lib/docker/overlay2/184ccf4335849b0b9d4427c47fed2d4e098fa278841cb3b73b8296a053eb7da2/diff:/var/lib/docker/overlay2/309a7215c73eed1e4362551ef038f89b22fa388289b6bae168eef3d0849e54c8/diff:/var/lib/docker/overlay2/72c8c882fb6eef99e0d0e65c6346123f7e6d518edb5f8a87251dcd1e3d150994/diff",
"MergedDir": "/var/lib/docker/overlay2/1348860d518c757e7e1ff3c1e6f28c07c19de62d89a7cef4c80ceaad16fe462b/merged",
"UpperDir": "/var/lib/docker/overlay2/1348860d518c757e7e1ff3c1e6f28c07c19de62d89a7cef4c80ceaad16fe462b/diff",
"WorkDir": "/var/lib/docker/overlay2/1348860d518c757e7e1ff3c1e6f28c07c19de62d89a7cef4c80ceaad16fe462b/work"
},
"Name": "overlay2"
},
"Mounts": [
{
"Type": "bind",
"Source": "/var/log/spring",
"Destination": "/var/log/spring",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "volume",
"Name": "30fc28fdb0150ac58196c22ed7a93859f4f006a6144e45a7ac1debf48d325dc9",
"Source": "/var/lib/docker/volumes/30fc28fdb0150ac58196c22ed7a93859f4f006a6144e45a7ac1debf48d325dc9/_data",
"Destination": "/tmp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "bind",
"Source": "/home/centos/git/hexo/source/_posts",
"Destination": "/home/centos/git/hexo/source/_posts",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
"Hostname": "lightsail",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"SPRING_PROFILES_ACTIVE=prod",
"PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=en_US.UTF-8",
"LANGUAGE=en_US:en",
"LC_ALL=en_US.UTF-8",
"JAVA_VERSION=jdk8u382-b05",
"JAVA_HOME=/opt/java/openjdk",
"LD_LIBRARY_PATH=:/usr/lib64"
],
"Cmd": null,
"Image": "blog",
"Volumes": {
"/tmp": {}
},
"WorkingDir": "",
"Entrypoint": [
"java",
"-jar",
"/blog-server.jar"
],
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20201113",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS",
"org.opencontainers.image.created": "2020-11-13 00:00:00+00:00",
"org.opencontainers.image.licenses": "GPL-2.0-only",
"org.opencontainers.image.title": "CentOS Base Image",
"org.opencontainers.image.vendor": "CentOS"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "1784dcbf33ad6f4b77cee88b29fd5a20c004ae83314449e6a8e3d65ec4da0432",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/default",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"host": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "f2bdcc4e19f4fddcc771e5107d9aeb36e7bdfcd1a2ff93afb3d34da6cbce33b7",
"EndpointID": "f27b48b87af78897921f13db8187b4c17756f8d63a0ff51ac292e0372c6ce443",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "",
"DriverOpts": null
}
}
}
}
]
查看Docker容器的启动命令
1、如果在容器内部,可以用 ps -fe
查看,其中 1 号进程就是启动命令
2、在容器外部,物理机上,可以用 docker inspect container_id/name
查看,Config 中的 Cmd 或 Entrypoint 就是启动命令
或者直接 docker inspect --format '{{.Config.Cmd}}' container_id
runlike 查看运行中容器的完整docker run命令
可以使用 python 工具 runlike 查看运行中容器的完整 docker run 命令
pip install runlike
runlike container_id
例如:
runlike selenium-standalone-chrome
docker run --name=selenium-standalone-chrome --hostname=centos --user=1200 --env='SE_OPTS=-port 8444' --network=host --log-opt max-size=50m --log-opt max-file=5 --runtime=nvidia --detach=true dockerproxy.net/selenium/standalone-chrome:3.141.59 /opt/bin/entry_point.sh
runlike selenium-standalone-firefox
docker run --name=selenium-standalone-firefox --hostname=centos --user=1200 --env='SE_OPTS=-port 8445' --network=host --log-opt max-size=50m --log-opt max-file=5 --runtime=nvidia --detach=true dockerproxy.net/selenium/standalone-firefox:3.141.59 /opt/bin/entry_point.sh
上一篇 Docker-Compose
页面信息
location:
protocol
: host
: hostname
: origin
: pathname
: href
: document:
referrer
: navigator:
platform
: userAgent
: