目录
1. 前提条件
win10 + WSL2 + Ubuntu(截止202308最新版本是20.04.xx)
有不少的博客都是建议直接安装docker desktop,这样无论在windows下还是wsl2的Ubuntu子系统下,都可以使用docker命令。
可实际上,随着Docker desktop可能商业化,而且和windows的兼容和性能问题,越来越多公司和个人不太愿意继续安装Docker Desktop,那么Distrod将是一个不错的替代产物。
![](https://i-blog.csdnimg.cn/blog_migrate/3469273d08c8f7c5aef015ec6b9c1a36.png)
2.安装Distrod
打开Terminal的,进入Ubuntu控制台,直接安装Distrod
# 先创建一个目录
sudo mkdir -p ~/distrod
# 进入目标目录
cd ~/distrod
# 安装Distrod
curl -L -O "https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh"
chmod +x install.sh
sudo ./install.sh install
继续在Ubuntu控制台执行
# 或者可以一劳永逸选择在Windows启动
/opt/distrod/bin/distrod enable --start-on-windows-boot
# 此种不能在启动windows的时候启动
# /opt/distrod/bin/distrod enable
# 启动Docker服务
sudo systemctl enable docker.service && sudo systemctl start docker.service
# 或者
# sudo service docker start
3. 常见问题
3.1.docker compose 问题无法使用问题
如果你已经通过Distrod在WSL2上正确安装并运行了Docker,但是Docker Compose报错,可能需要检查Docker Compose的安装版本和配置。确保已经安装了与Docker兼容的Docker Compose版本,最新的版本通常是可以的。Docker Compose的安装和Docker类似,都是直接在WSL的Ubuntu子系统中安装。
首先在WSL Ubuntu 终端中移除已安装的docker-compose:
sudo rm /usr/local/bin/docker-compose
然后下载最新版本的Docker Compose二进制文件并安装:
sudo curl -L "https://github.com/docker/compose/releases/download/2.1.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
这将在你的WSL Ubuntu子系统中安装Docker Compose的最新版本。你可以使用`docker-compose --version`来测试是否正确安装。
如果问题仍然存在,可以尝试对Docker Compose环境进行调试,或者尝试重装Distrod和Docker。在安装和使用中遇到问题时,有时候症状会模糊,无法准确诊断问题来源,因此可能需要多次尝试才能找到解决问题的方法。
另外,一种简单的尝试是安装Docker Compose作为一个python包,使用pip:
sudo pip install docker-compose
注意: 使用这种方法时,需要确保pip版本是最新的,且Python环境配置正常。
最后,报错信息是非常有用的,在解决问题的过程中务必注意保存和参考。
3.1. docker-compose up报错
pip安装后,执行一个docker-compose.yaml后启动mysql容器,报错:
Pulling mysql8.0 (mysql:8.0.21)... Traceback (most recent call last): File "docker-compose", line 3, in <module> File "compose/cli/main.py", line 81, in main File "compose/cli/main.py", line 202, in perform_command File "compose/metrics/decorator.py", line 18, in wrapper File "compose/cli/main.py", line 1188, in up File "compose/cli/main.py", line 1184, in up File "compose/project.py", line 671, in up File "compose/service.py", line 359, in ensure_image_exists File "compose/service.py", line 1291, in pull File "compose/progress_stream.py", line 99, in get_digest_from_pull File "compose/service.py", line 1258, in _do_pull File "docker/api/image.py", line 411, in pull File "docker/auth.py", line 48, in get_config_header File "docker/auth.py", line 324, in resolve_authconfig File "docker/auth.py", line 235, in resolve_authconfig File "docker/auth.py", line 262, in _resolve_authconfig_credstore File "docker/auth.py", line 287, in _get_store_instance File "docker/credentials/store.py", line 25, in __init__ docker.credentials.errors.InitializationError: docker-credential-desktop.exe not installed or not available in PATH [11595] Failed to execute script docker-compose
这个错误是因为docker-compose试图从docker-credential-desktop获取凭据,但是失败了,因为你的环境中没有这个,原因是你的系统中并没有安装Docker Desktop。
在你的场景中,下面是解决此问题的步骤:
1. 在你的`.bashrc`或`.zshrc` 文件中添加以下环境变量:
export DOCKER_HOST=tcp://localhost:2375
这样就可以使docker和docker-compose知道在哪里寻找docker daemon。
2. 删除`~/.docker/config.json` 文件或者编辑此文件,删除里面 `"credsStore": "desktop",` 这一行。
然后运行 `source ~/.bashrc` 或者 `source ~/.zshrc` 让环境变量生效,并尝试再次运行docker-compose命令。
这样应该可以解决你的问题。
参考文档
ChatGPT