既想隐私又要性能?Dify+Ollama+Docker 本地/线上大模型一键切换

1. docker 安装
以 ubuntu 为例,可参见官网文档:
https://docs.docker.com/engine/install/ubuntu/。
# 1. Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 2. Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

# 3. Install latest version
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 4. Check installation
sudo docker ps
sudo systemctl status docker
2. ollama 安装
2.1. 无GPU方式:CPU only
- way1: 使用默认 docker network
# 默认 docker network: dify 和 ollama 需要通过 ip 地址相互访问
sudo docker run -d -e TZ="Asia/Shanghai" -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
- way2: 为 ollama 和后续的 dify 指定专用 docker 网络 llm-net:好处是 dify 和 ollama 可以直接通过容器名相互访问
# 创建网络
sudo docker network create llm-net
# 指定运行于 llm-net 网络
sudo docker run -d -e TZ="Asia/Shanghai" --network llm-net -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
2.2. 有GPU方式:Nvidia GPU
以 nvidia gpu 为例。
# 1. Configure the repository
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey
| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g'
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
# 2. Install the NVIDIA Container Toolkit packages
sudo apt-get install -y nvidia-container-toolkit
# 3. Configure Docker to use Nvidia driver
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

# 检查 Docker 守护进程配置是否包含 NVIDIA 运行时
cat /etc/docker/daemon.json
# 检查 Docker 支持的运行时
docker info | grep -i runtime

Way1: 使用默认 docker network
# 使用默认 docker network
sudo docker run -d -e TZ="Asia/Shanghai" --gpus=all -v ollama:/root/.ollama -p 11343:11434 --name ollama ollama/ollama
# check ollama version
sudo docker exec -it ollama ollama --version

Way2: 为 ollama 和后续的 dify 指定专用 docker 网络 llm-net
# 为 ollama 和后续的 dify 指定专用 docker 网络 llm-net
sudo docker run -d -e TZ="Asia/Shanghai" --network llm-net --gpus=all -v ollama:/root/.ollama -p 11343:11434 --name ollama ollama/ollama
# check ollama version
sudo docker exec -it ollama ollama --version
# pull and run
sudo docker exec -it ollama ollama run llama3.2
# pull
sudo docker exec -it ollama ollama pull qwen3:4b
# run
sudo docker exec -it ollama ollama run qwen3:4b

3. dify 安装
3.1. dify 下载&解压
下载地址:
https://github.com/langgenius/dify
sudo apt install unzip
unzip dify-1.10.1.zip
mv dify-1.10.1 dify
3.2. 拉取容器镜像并运行
cd dify
cd docker
cp .env.example .env
docker compose up -d
关于是否需要 cp middleware.env.example middleware.env:

基础使用并不需要的,当需要使用 Dify 自定义插件(如自定义工具、第三方系统集成)、部署 LLM 网关等才需要。如果不确定,先只配置 .env 完成基础部署,后续需要中间件时再补充 middleware.env 即可(不会影响已部署的核心服务)。
3.3. 初始化页面设置管理员账号
不出意外会遇到这样的问题:Setup failed: PermissionDenied (persistent) at write => permission denied Context: service: fs path:
privkeys/7ea38bdc-c2d8-4581-9bce-bd8925a334c7/private.pemSource: Permission denied (os error 13).

出问题的缘由是:privkeys 目录权限不足导致的,官方说明如下。

解决方案:按官方给出的方案修改目录的 own 即可
sudo chown -R 1001:1001 ./volumes/app/storage
注意:宿主机并没有 1001 这个用户,可以通过如下命令查看:
id -nu 1001

容器用户可以通过如下命令查看:
sudo docker exec -it docker-api-1 id -u

这并不妨碍容器中 1001 用户拥有该目录。这是由于:文件权限的核心是 UID 数值匹配。容器内的进程以 UID 1001 运行,访问挂载目录时,系统会检查 “进程 UID” 与 “文件所有者 UID” 是否一致 —— 只要数值都是 1001,就允许读写,无需宿主机存在 UID 1001 的用户。
权限修改之后,再次打开 http://localhost/install 就可以成功初始化并进入 dify 了:

4.示例1:dify + ollama + 本地 qwen3:4b


5.示例2:dify + ollama + aliyun qwen-flash

配置成功后,可以看到 aliyun 提供的模型列表:









我测试过ollamma放到docker里面运行大模型性能会受到限制,很容易崩溃。我当时想的是简单部署,简化企业部署大模型繁琐流程,想法很好,一切配置好了,结果一运行直接崩溃,后来又把ollama转移到宿主机安装。技术栈是springboot3+antd+milvus,也其他张良数据库。客户端采用antdx+tauri
很强,学习了🤙
收藏了,感谢分享