Wsl2 Ubuntu在不安装Docker Desktop情况下使用Docker

目录

1. 前提条件

2.安装Distrod

3. 常见问题

3.1.docker compose 问题无法使用问题

3.1. docker-compose up报错

参考文档


1. 前提条件

win10 + WSL2 + Ubuntu(截止202308最新版本是20.04.xx)

有不少的博客都是建议直接安装docker desktop,这样无论在windows下还是wsl2的Ubuntu子系统下,都可以使用docker命令。

可实际上,随着Docker desktop可能商业化,而且和windows的兼容和性能问题,越来越多公司和个人不太愿意继续安装Docker Desktop,那么Distrod将是一个不错的替代产物。

图1 Win10系统已经启用了Wsl并且子系统还是Ubuntu20.04

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

如何不安装Docker Desktop在WSL下运行Docker - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/164018.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA项目下不显示target目录或者target目录不完整没有新添加的资源,idea隐藏target目录

文章目录 一、前言二、idea隐藏target目录2.1、idea隐藏target目录2.2、git提交时隐藏target目录 三、idea下显示target目录3.1、解决idea下不显示target目录问题3.2、target显示目录不完整 一、前言 在idea-2020.1.4版本下讲解idea怎么显示或隐藏target目录。 需要知道:如果…

什么是微服务?与分布式又有什么区别?

什么是微服务&#xff0c;我们先从传统的单体结构进行了解&#xff0c;对两者进行对比。 单体结构 单体结构是一种传统的软件架构模式&#xff0c;它将应用程序划分为一组相互依赖的模块和组件。这些模块和组件通常都是构建在同一个平台上的&#xff0c;并且紧密耦合在一起。…

大数据学习之Spark性能优化

文章目录 Spark三种任务提交模式宽依赖和窄依赖StageSpark Job的三种提交模式 Shuffle机制分析未优化的Hash Based Shuffle优化后的Hash Based ShuffleSort-Based Shuffle Spark之checkpointcheckpoint概述checkpoint与持久化的区别checkPoint的使用checkpoint源码分析 Spark程…

AJAX-解决回调函数地狱问题

一、同步代码和异步代码 1.同步代码 浏览器是按照我们书写代码的顺序一行一行地执行程序的。浏览器会等待代码的解析和工作&#xff0c;在上一行完成之后才会执行下一行。这也使得它成为一个同步程序。 总结来说&#xff1a;逐行执行&#xff0c;需原地等待结果后&#xff0…

【Database System Concept 7th】Chapter 24 Advanced Indexing Techniques 读书笔记

Chapter 24 Advanced Indexing Techniques 24.5 Hash Indices24.5.1 Static Hashing24.5.2 Dynamic Hashing24.5.2.1 Data Structure24.5.2.2 Queries and Updates 24.5 Hash Indices 24.5.1 Static Hashing 这一部分就不介绍了&#xff0c;在14.5中已经介绍过了。 24.5.2 D…

Kotlin基础数据类型和运算符

原文链接 Kotlin Types and Operators Kotlin是新一代的基于JVM的静态多范式编程语言&#xff0c;功能强大&#xff0c;语法简洁&#xff0c;前面已经做过Kotlin的基本的介绍&#xff0c;今天就来深入的学习一下它的数据类型和运算操作符。 数据类型 与大部分语言不同的是&am…

2、Sentinel基本应用限流规则(2)

2.2.1 是什么 Sentinel 是阿里中间件团队开源的&#xff0c;面向分布式服务架构的轻量级高可用流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。 2.2.2 基本概念 • 资源 (需要被保护的东西…

Chrome插件精选 — 广告拦截插件

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件挑选出比较好用的一款或几款&#xff0c;尽量满足界面精致、功能齐全、设置选项丰富的使用要求&#xff0c;便于节省一个个去尝试的时间和精力。 1. Adblock Plus 广…

奔驰E Coupe 升级鼠标按键 操作简单 完美结合

人机交互系统正是汽车智能化发展的产物&#xff0c;它实现了人与车之间的互联。不知道大家有没有发现&#xff0c;在很多奔驰车的中央扶手箱前&#xff0c;有一块类似于“鼠标”的操作区&#xff0c;它并不是我们常见的换挡杆&#xff0c;而是奔驰研发的独立影音控制系统COMAND…

APP开发:用途与未来前景|软件定制开发|网站小程序建设

APP开发&#xff1a;用途与未来前景|软件定制开发|网站小程序建设 APP开发已成为现代科技趋势的一部分&#xff0c;无论是日常生活还是商业领域&#xff0c;都有它的身影。通过开发APP&#xff0c;我们可以将想法、功能和内容转化为直观、易用的移动设备应用程序&#xff0c;满…

chrome v3开发插件实现所有网站允许跨域

场景&#xff1a; chrome 插件 升级到v3后&#xff0c;原来修改请求响应都变成异步&#xff0c;即无法同步拦截来修改请求响应。 在v3中也不支持修改请求响应内容。 问题&#xff1a;如何在chrome v3中允许其他网站跨域呢。 方式一&#xff1a;禁用chrome跨域&#xff0c;禁…

云安全—Dashboard 攻击面

0x00 前言 众所周知&#xff0c;如果只是一味的REST接口或者命令行话的操作方式&#xff0c;就会变相的提高操作门款&#xff0c;并且不会有很好的呈现方式&#xff0c;所以就有了web ui的方式&#xff0c;也就是Dashboar面板&#xff0c;本篇主要讨论一下关于Dashboar面板的概…