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 中,你可以按照以下步骤进行操作:
- 在本地修改代码: 首先,在你的本地开发环境中修改 Docker 容器中运行的代码。你可以使用任何你喜欢的编辑器或集成开发环境来进行代码修改。
- 重新构建 Docker 镜像: 一旦你完成了代码的修改,你需要根据修改后的代码重新构建 Docker 镜像。你可以在 Dockerfile 所在的目录中运行
docker build
命令来构建镜像。例如:
lua
bashCopy code
docker build -t ghcr.io/open-webui/open-webui:latest .
确保将命令中的镜像标签替换为你想要的标签,并且命令中的 .
表示 Dockerfile 所在的目录。
- 停止并删除当前运行的容器: 在部署新的 Docker 镜像之前,你需要停止并删除当前正在运行的容器。你可以使用以下命令:
arduino
bashCopy codedocker stop open-webui
docker rm open-webui
- 运行新的 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)的方式将容器内的代码映射到你的本地开发环境中,然后在本地环境中进行修改。一般来说,你可以按照以下步骤操作:
- 确定容器内的代码路径: 首先,你需要确定容器内运行的代码位于哪个路径。在你提供的命令中,使用了
-v open-webui:/app/backend/data
参数来将名为open-webui
的 Docker 卷挂载到了容器中的/app/backend/data
目录。这意味着容器中的代码位于/app/backend/data
目录下。 - 将容器内的代码映射到本地: 使用这个卷挂载功能,你可以将容器内的代码映射到你的本地开发环境中。具体操作是在运行容器的时候,将本地开发环境中的一个目录挂载到容器内的
/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
目录下。
- 在本地修改代码: 现在,你可以使用你喜欢的编辑器或集成开发环境,在本地的
/path/to/local/code
目录下修改容器内的代码。 - 重启容器: 在你完成了代码的修改后,你需要重新启动 Docker 容器,以便使修改生效。你可以使用
docker restart open-webui
命令来重启容器。
通过以上步骤,你就可以在本地修改 Docker 容器中运行的代码,并重新启动容器以使修改生效。