📌  相关文章
📜  docker 将卷添加到正在运行的容器 (1)

📅  最后修改于: 2023-12-03 15:14:46.410000             🧑  作者: Mango

Docker 将卷添加到正在运行的容器

在进行 Docker 容器的开发和运维时,经常需要在运行的容器中添加新的卷,以便存储或读取数据。Docker 提供了多种方式来添加卷,其中最常用的是将卷添加到正在运行的容器中。

下面介绍如何使用 Docker 将卷添加到正在运行的容器。

步骤
  1. 找到需要添加卷的容器 ID 或容器名称:
$ docker ps
  1. 使用 docker inspect 命令获取容器的详细信息,并查找容器当前使用的卷:
$ docker inspect [container_id or container_name] | grep "Volumes"
  1. 在容器中添加新的卷。可以使用 --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]
  1. 验证容器中的卷是否添加成功:
$ docker inspect [container_id or container_name] | grep "Volumes"
示例

以下示例演示了如何将卷添加到正在运行的容器中。

假设当前有一个名为 web_server 的容器正在运行,并且该容器需要添加一个新的卷来存储日志文件。

  1. 找到容器 ID 或容器名称:
$ 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

  1. 获取容器当前使用的卷:
$ docker inspect web_server | grep "Volumes"
"Volumes": {
    "/var/log/nginx": {}
},

可以看到容器当前使用的卷是 /var/log/nginx

  1. 在容器中添加新的卷。假设要将卷添加到容器的 /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 目录,并设置权限以便其他用户可写入。

  1. 验证容器中的卷是否添加成功:
$ docker inspect web_server | grep "Volumes"
"Volumes": {
    "/host/path/to/logs": {},
    "/var/log/nginx": {}
},

可以看到新的卷 /host/path/to/logs 已被添加到容器中。

结论

通过本文介绍,你已经了解了如何使用 Docker 将卷添加到正在运行的容器中。根据实际需求,可以选择使用 --mount 参数或 -v 参数来添加卷。添加卷后,可以使用 docker inspect 命令验证卷是否成功添加到容器中。