📅  最后修改于: 2023-12-03 15:14:46.410000             🧑  作者: Mango
在进行 Docker 容器的开发和运维时,经常需要在运行的容器中添加新的卷,以便存储或读取数据。Docker 提供了多种方式来添加卷,其中最常用的是将卷添加到正在运行的容器中。
下面介绍如何使用 Docker 将卷添加到正在运行的容器。
$ docker ps
docker inspect
命令获取容器的详细信息,并查找容器当前使用的卷:$ docker inspect [container_id or container_name] | grep "Volumes"
--mount
参数或 -v
参数来添加卷。使用 --mount
参数可以指定卷的类型、卷名称、容器中的目标路径和其他选项:
$ docker container run \
--mount type=bind,source=/path/on/host,target=/path/in/container,readonly \
[image_name]
使用 -v
参数可以指定卷名称和容器中的目标路径:
$ docker container run \
-v /path/on/host:/path/in/container \
[image_name]
$ docker inspect [container_id or container_name] | grep "Volumes"
以下示例演示了如何将卷添加到正在运行的容器中。
假设当前有一个名为 web_server
的容器正在运行,并且该容器需要添加一个新的卷来存储日志文件。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f7ff56791a0 nginx:latest "nginx -g '..." 5 minutes ago Up 5 minutes 80/tcp web_server
可以看到容器名称为 web_server
,容器 ID 为 2f7ff56791a0
。
$ docker inspect web_server | grep "Volumes"
"Volumes": {
"/var/log/nginx": {}
},
可以看到容器当前使用的卷是 /var/log/nginx
。
/app/logs
目录下:$ docker container exec -it \
web_server \
sh -c "mkdir /app/logs && chmod o+w /app/logs"
$ docker container run \
--mount type=bind,source=/host/path/to/logs,target=/app/logs,readonly=false \
web_server
这里使用了 --mount
参数来添加卷,指定了卷的类型为 bind
,卷名称为 /host/path/to/logs
,容器中的目标路径为 /app/logs
,并设置了 readonly
选项为 false
。在运行容器前,还需要创建 /app/logs
目录,并设置权限以便其他用户可写入。
$ docker inspect web_server | grep "Volumes"
"Volumes": {
"/host/path/to/logs": {},
"/var/log/nginx": {}
},
可以看到新的卷 /host/path/to/logs
已被添加到容器中。
通过本文介绍,你已经了解了如何使用 Docker 将卷添加到正在运行的容器中。根据实际需求,可以选择使用 --mount
参数或 -v
参数来添加卷。添加卷后,可以使用 docker inspect
命令验证卷是否成功添加到容器中。