我有个容器,经常需要增加挂载新目录(volumes)现在一直是删除容器后,修改.yml 文件新建一个新的容器,请问有没有什么版本可以实现停止容器后,新增挂载点后通过 docker start 启动的办法?谢谢,查了一圈都没好答案.
1
listenfree 2023-10-25 21:07:21 +08:00
把挂载点路径,写进环境变量,传给 docker start ,不知道我理解你的意思没?
|
2
listenfree 2023-10-25 21:09:06 +08:00
下面是 chatgpt 的理解:
对于已经运行的容器,如果需要新增挂载点( volumes ),您可以使用 Docker 的 docker volume create 命令来创建一个独立的数据卷,并将其挂载到已经停止的容器上。这样,在启动容器时就会自动加载新的挂载点。 以下是一些步骤来实现这个目标: 停止正在运行的容器: shell docker stop <container_name> ``` 创建新的数据卷: shell docker volume create <volume_name> ``` 将新的数据卷挂载到容器上: shell docker run -d --name <new_container_name> -v <volume_name>:<mount_path> <image_name> ``` 其中,`<volume_name>`是步骤 2 中创建的数据卷的名称,`<mount_path>`是您希望将数据卷挂载到容器中的路径,`<image_name>`是容器的镜像名称。 启动新的容器: shell docker start <new_container_name> ``` 通过这种方式,您可以在停止容器后新增挂载点,并在启动容器时自动加载新的挂载点,而无需删除和重新创建容器。 请注意,这种方法适用于单个容器。如果您使用 Docker Compose 或编排工具来管理多个容器,您可能需要相应地调整配置文件来包含新的挂载点。 |
3
XiLingHost 2023-10-25 21:17:37 +08:00
@listenfree chatgpt 在瞎说,这个实际上还是 recreate 了容器,你只要改变了容器的元数据就一定会重新创建容器
|
4
XiLingHost 2023-10-25 21:25:23 +08:00
你其实是希望容器不要被重新创建以致于丢失未被持久化的内容吗?
这不是容器化方案的最佳实践,一般来说需要持久化的内容都应当被挂载为卷,无论是 bind 方式还是 volume 方式 有个 workaround 是,你可以挂载一个目录进去,然后通过 mount --bind 方式把其他的挂载点挂载到这个已经挂载到容器内的目录里来实现动态挂载卷 |
5
Donahue 2023-10-25 21:27:33 +08:00
宿主机直接软链接到已经挂载的文件夹可行吗
|
6
jiayouzl OP @XiLingHost 我是用的 Nginx Proxy Manager 做反向代理+一些其他需要的功能,反向代理 Django 项目的时候需要 nginx 托管静态文件,上一个新的 Django 项目就要重新挂载一个新的 Django 项目的静态文件目录到 Nginx Proxy Manager 容器里去.一些非持久化的数据到到不是特别重要,最烦的就是 Nginx Proxy Manager 也是基于 Python 开发的,我用 HTTPS 证书是通过阿里云的 Key 去管理的,Nginx Proxy Manager 容器本身用的 pip 镜像还是国外的,国内云服务器下载国外镜像的速度与错误率你肯定也知道的,主要是重建一个新容器的时候老是失败,导致其他项目也会崩.
所以我想有没有什么办法在不删除容器新建一个 Nginx Proxy Manager 容器的前提下,新增一个挂载卷,stop 容器没事的,毕竟 docker 启动还是很快的. |
7
jiayouzl OP @listenfree 你的意思我在.bash_profile 写挂载点的路径地址,然后通过容器去读环境变量?这个 yml 或者 docker run 的时候要怎么写-v 的参数?
|
8
CEBBCAT 2023-10-25 22:20:33 +08:00
@listenfree #2 AI 生成内容有一定几率导致自己被 ban ,可以搜索站内相关关键字和「关于」页面,祝好运
|
9
XiLingHost 2023-10-25 22:25:19 +08:00 1
@jiayouzl 这个情况估计也只能曲线救国,尝试把这些静态文件挂载到一个特定的目录然后把整个目录挂载到你的 Nginx Proxy Manager 容器里了
不过为啥不把这些静态文件专门挂载到一个单独的 nginx 容器里呢? |
10
jiayouzl OP @XiLingHost 哈哈哈哈,你这个方法就是我最初的方法,成熟项目还好点,新项目静态资源经常有改动就得老拷贝来拷贝去的,不过实在没办法也就只能这样了.
|
11
XiLingHost 2023-10-25 22:42:55 +08:00
@jiayouzl 其实我是觉得你们可以考虑把静态资源直接构建成一个前端镜像,然后 nginx 只需要配置代理到这个容器就行了
如果是这种做法可以考虑这个镜像 https://hub.docker.com/r/nginxproxy/nginx-proxy |
12
jiayouzl OP @XiLingHost 谢了,我这就看下.
|
13
yinmin 2023-10-26 01:10:10 +08:00 via iPhone
@listenfree chatgpt 给出的答案是错误的。
@jiayouzl 90%的 Django 项目,静态资源可以直接放在 Django 项目里。除非是高并发项目,否则别分离出来给 nginx 。用 docker 的单机项目,大都数情况也不太会是高并发项目吧。 |