Docker本地部署和映射

Docker本地部署和映射

问题

问题的由来

Open WebUi 项目是开源的大模型问答可视化的项目。原本想本地部署,但是部署没成功,因为最后一步有些地方除了问题,需要手动下载,对于这个开源项目不熟悉,不知道具体下载什么和放在项目什么位置。
同时他的官网也是知识提供了docker下载,没有提供本地下载可靠方法。借用原文就是:虽然我们强烈建议使用方便的 Docker 容器安装以获得最佳支持,但我们知道某些情况可能需要非 Docker 设置,尤其是出于开发目的。请注意,官方不支持非 Docker 安装,您可能需要自行进行故障排除。 于是就是通过docker安装,然后本地改了再通过docker部署上去。

问题的解决

开始

开始是比较迷的,就是直接没有接触过docker,这一次采用docker部署,然后直接用的官网的命令。他对于我来说是一个黑盒子。 于是在网上找,通过百度搜,还有就是通过chatgpt问。然后看了一下官网,没看懂。

之后就是在一个多小时后,通过gpt有了下面《之前的思路》。然后按照这个实践。但是遇到了问题: docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v E:/webdocker:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

通过这个代码,映射到本地,但是就是不是我本地运行的代码。只有一些部分代码,没看懂。觉得这个思路有问题。

中间

接着上面的,于是请教老同事,得到的结论有两个点:一个是这个思路是对的,通过映射建立本地和容器里面代码一样;一个是我目前这个的代码

bash 复制代码
-v E:/webdocker:/app/backend
应该改为:-v E:/webdocker:/app

于是我按照这个思路继续改,其实就是把命令改一下。

结果发现改了之后。docker容器创建了,但是运行不起来了。

于是乎我就是继续百度。

然后就是自己看了一下,摸索着:这个不就是文件的映射吗。我直接把本地可以运行的文件放在这个地方就是可以了。于是把本地可以运行的文件放在了这个位置,docker运行起来了。

然后给我改了代码,然后重启容器,发现项目运行起来了,就是没有显示改过之后的代码,还是之前的。

最后

然后这个问题继续请教同事,得到的结果是应该有个地方没有配好。和我说了可以使用docker desktop 配置,然后演示了一遍给我看。

我就自己配置,不再通过命令来创建容器,修改映射地址,直接通过可视化的docker desktop来改。

然后发下创建了之后仍然不可以。 再次请教,得到的答案是不要把整个都替换了,只需要替换build(但是第一次问得到的结果是说把这个替换了) 然后就是只是把build替换了,但是发现还是运行之后发现不是最新的代码,通过decker desktop 发现也是挂载上去了但是就是不是最新的代码。

后面再次请教,同事来调试了会儿。后面慢慢发现,是配置映射的时候,映射的还是app,不是app下的build。然后映射之后是运行不起来的,需要自己把本地的build放进去之后才是可以的。

最后就是完美解决了

之前的思路

思路

官网:github.com/open-webui/... 官方推荐下载docker:docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

如果你想修改 Docker 容器中运行的代码,并且希望将修改后的代码重新部署到 Docker 中,你可以按照以下步骤进行操作:

  1. 在本地修改代码: 首先,在你的本地开发环境中修改 Docker 容器中运行的代码。你可以使用任何你喜欢的编辑器或集成开发环境来进行代码修改。
  2. 重新构建 Docker 镜像: 一旦你完成了代码的修改,你需要根据修改后的代码重新构建 Docker 镜像。你可以在 Dockerfile 所在的目录中运行 docker build 命令来构建镜像。例如:
lua 复制代码
bashCopy code
docker build -t ghcr.io/open-webui/open-webui:latest .

确保将命令中的镜像标签替换为你想要的标签,并且命令中的 . 表示 Dockerfile 所在的目录。

  1. 停止并删除当前运行的容器: 在部署新的 Docker 镜像之前,你需要停止并删除当前正在运行的容器。你可以使用以下命令:
arduino 复制代码
bashCopy codedocker stop open-webui
docker rm open-webui
  1. 运行新的 Docker 容器: 一旦你构建了新的 Docker 镜像,并且删除了旧的容器,你可以使用 docker run 命令来运行新的容器。确保将命令中的镜像标签替换为你刚刚构建的镜像标签。
kotlin 复制代码
bashCopy code
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:latest

通过这些步骤,你就可以在本地修改 Docker 容器中的代码,并将修改后的代码重新部署到 Docker 中。

第一步 本地修改代码

如果你想在本地修改 Docker 容器中运行的代码,你需要通过挂载卷(Volume)的方式将容器内的代码映射到你的本地开发环境中,然后在本地环境中进行修改。一般来说,你可以按照以下步骤操作:

  1. 确定容器内的代码路径: 首先,你需要确定容器内运行的代码位于哪个路径。在你提供的命令中,使用了 -v open-webui:/app/backend/data 参数来将名为 open-webui 的 Docker 卷挂载到了容器中的 /app/backend/data 目录。这意味着容器中的代码位于 /app/backend/data 目录下。
  2. 将容器内的代码映射到本地: 使用这个卷挂载功能,你可以将容器内的代码映射到你的本地开发环境中。具体操作是在运行容器的时候,将本地开发环境中的一个目录挂载到容器内的 /app/backend/data 目录。例如:
arduino 复制代码
bashCopy code
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend --name open-webui --restart always ghcr.io/open-webui/open-webui:main
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v E:/webdocker:/app --name open-webui --restart always ghcr.io/open-webui/open-webui:main

这样,你就将容器内的代码映射到了你本地的 /path/to/local/code 目录下。

  1. 在本地修改代码: 现在,你可以使用你喜欢的编辑器或集成开发环境,在本地的 /path/to/local/code 目录下修改容器内的代码。
  2. 重启容器: 在你完成了代码的修改后,你需要重新启动 Docker 容器,以便使修改生效。你可以使用 docker restart open-webui 命令来重启容器。

通过以上步骤,你就可以在本地修改 Docker 容器中运行的代码,并重新启动容器以使修改生效。

相关推荐
橙子家8 分钟前
浏览器缓存之【结构化数据库与缓存】: IndexedDB、Cache storage 和 Storage buckets
前端
user205855615181314 分钟前
X6 中边悬浮置顶,规避 `mouseleave` 事件丢失问题
前端
李明卫杭州15 分钟前
CSS aspect-ratio 属性完全指南
前端
Pedantic2 小时前
SwiftUI 手势层级(Gesture Hierarchy)详解
前端
飘尘2 小时前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
一颗烂土豆3 小时前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
浏览器工程师4 小时前
AI Agent 接浏览器任务,先别让它一路点到底
前端·后端
雨季mo浅忆4 小时前
VSCode自动格式化三要素
前端
爱勇宝4 小时前
深扒 Anthropic 1680 位工程师简历:应届生几乎没机会,AI 公司最缺的不是博士
前端·后端·程序员