WSL中的docker安装
Docker安装
使用docker desktop在wsl中安装docker

安装docker desktop后,启动并设置docker desktop,wsl安装的是Ubuntu-22.04,重启后进入wsl环境

在wsl安装docker
进入wsl 系统环境,执行如下命令:更新包列表,安装依赖
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
添加docker官方GPG key:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
添加docker库到APT源:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
再次更新包列表:sudo apt update
安装docker: sudo apt install -y docker
开启docker:systemctl start docker
激活docker:systemctl enable docker
注:可在命令前添加sudo授予权限。
检测docker安装运行成功:docker --version
docker安装ollama
wsl环境,命令:docker pull ollama/ollama:latest(权限不足可在前面添加sudo)
遇到报错:Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
解决方法:
- 检测网络:ping google.com,如果ping不通,可能是网络问题。
- 检测docker daemon状态:systemctl status docker,如果docker状态不是active(running)状态,可重启尝试:systemctl restart docker.
- 增加timeout时间:打开或创建daemon.json文件,vim /etc/docker/daemon.json, 添加:
{
"registry-mirrors": ["https://registry-1.docker.io"],
"max-concurrent-downloads": 1,
"disable-legacy-registry": true
}
重启docker:systemctl restart docker
- 使用docker镜像,修改或添加vim /etc/docker/daemon.json:
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
重启docker:systemctl restart docker
- 检测防火墙或proxy代理设置:如果使用公司防火墙或代理服务器,可能会导致连接docker hub出问题。检测是否能登录docker registry或更改proxy设置,进入docker 代理配置文件:/etc/system/docker.service.d/http-proxy.conf,修改其中http和https的代理地址,如下形式:
[Service]
Environment="HTTP_PROXY=http://your-proxy:port"
Environment="HTTPS_PROXY=http://your-proxy:port"
重新加载:systemctl daemon-reload
重启docker: systemctl restart docker
注:本次修改代理后就可以拉去ollama了,docker pull ollama/ollama:latest
- 使用docker桌面,可调整设置中的配置,setting->resources->wsl integration,确保integration的wsl distro是enabled。
- 清理docker缓存:docker system prune -a,移除未使用的镜像,容器和网络,这些可能会导致docker问题。
外部调用本地ollama
- 确保docker容器正在运行且监听某端口,命令:
将主机8080端口映射到容器内部8080端口,sudo docker run -d –name ollama-container -p 8080:8080 ollama/ollama:latest
- 获取公共IP或域名,公共IP地址-可直接联网使用,或指向公共IP的域名
- 如果使用路由器(如家庭或办公环境),需要做端口转发设置,允许外部请求到达docker容器。
在容器中查看镜像信息:cat /etc/os-release
在wsl中安装ollama:curl -fsSL https://ollama.com/install.sh | sh
创建打包docker镜像
目前docker安装在wsl环境中,创建文件夹:
mkdir docker-hello-world
cd docker-hello-world
创建 app.py 脚本-》print("Hello, Docker World!")
同一目录下创建文件Dockerfile(没有后缀):
# 使用官方 Python 镜像作为基础
FROM python:3.10-slim
# 设置工作目录
WORKDIR /app
# 拷贝当前目录下所有文件到镜像中
COPY . .
# 设置容器启动时执行的命令
CMD ["python", "app.py"] # 注意是双引号,单引号会无法运行
构建镜像:docker build -t hello-world-python . (注意‘.’代表本路径下的Dockerfile文件。
运行:docker run hello-world-python
打tag:docker tag <原镜像名>:<原标签> <新镜像名>:<新标签>,例如:docker tag hello-world-python:latest my_first_image:v1
删除镜像:docker rmi hello-world-python:latest
离线下载安装ollama模型
故使用docker拉取ollama镜像,镜像中的ollama依旧无法拉取模型。
网络下载guff模型文件到本地调用。
先在huggingface或其镜像(hf-mirror.com)下载模型,需要找到guff格式的模型文件(保存的时模型的权重)。

编辑modelfile文件,例如命名为config.modelfile,内容为:FROM ./ Llama-3.2-3B-Instruct-Q3_K_L.gguf
Llama-3.2-3B-Instruct-Q3_K_L.gguf文件和config.modelfile文件在同一路径下,如:/home/***/ollama/。
启动ollama容器:docker run -it -v /home/***/ollama:/home/.ollama –name my_ollama ollama:ollama,运行ollama镜像命名为my_ollama,挂载wsl中存放模型及文件的路径到ollama容器中的/home/.ollama。
进入ollama容器:docker exec -it my_ollama /bin/bash,如果容器没有命名也可使用对应容器的ID进入(docker ps -a查询)。
执行:ollama create llama3-3b(模型名称) -f ./config.modelfile,获得如下输出

使用ollama run llama3-3b启动模型
退出容器:ctrl + d
删除模型:ollama rm model_name

参考:
【大模型搭建】部署Ollama,pull失败,手动构建方案_ollama pull-CSDN博客
docker运行ollama镜像,以及离线方式加载模型_ollama 加载离线模型-CSDN博客
更多推荐
所有评论(0)