在 Docker 中,要实现不重启容器的情况下挂载或修改挂载目录,有以下几种方法:
docker cp
命令临时复制文件# 将主机文件复制到容器中
docker cp /host/path/file.txt container_name:/container/path/
# 将容器文件复制到主机
docker cp container_name:/container/path/file.txt /host/path/
这种方法适合临时性的文件传输,但不是真正的挂载。
nsenter
进入容器挂载# 获取容器PID
PID=$(docker inspect --format '{{.State.Pid}}' container_name)
# 使用nsenter进入容器命名空间
nsenter --target $PID --mount --uts --ipc --net --pid
# 在容器内部挂载
mount --bind /host/path /container/path
docker exec
结合挂载命令# 确保容器有mount权限
docker exec -it --privileged container_name bash -c "mount --bind /host/path /container/path"
--privileged
)运行bind mount
)是临时的,容器重启后会失效虽然有不重启的临时方案,但最佳实践是:
# 1. 停止容器
docker stop container_name
# 2. 提交容器为镜像(可选)
docker commit container_name new_image
# 3. 用新挂载配置启动容器
docker run -v /new/host/path:/container/path [其他参数] new_image
这样可以确保配置持久化且符合 Docker 的设计理念。