跳转至

Docker On Win10

简介

  • WSL 2 是对WSL基础体系结构的一次重大改造,它使用虚拟化技术和 Linux 内核来实现其新功能。
  • docker是基于linux内核运行
  • WSL 2 加入了linux内核为docker在windows上运行铺平了道路

系统要求

开启虚拟化 + Hyper-V

  • BIOS开启虚拟化
    • 查看是否开启:任务管理器 -> 性能 -> CPU 虚拟化:开启
  • Control Panel(控制面板) -> Programs and Features(程序和功能) -> Turn Windows Features on or off(启用或关闭Widnows功能)勾选三项
    • Windows Hypervisor Platform(Windows虚拟机监控程序平台)
    • Hyper-V
    • 虚拟机平台
  • 管理员Powershell运行 bcdedit /set hypervisorlaunchtype auto
  • 重启

WSL 2

参考教程安装 WSL旧版 WSL 的手动安装步骤

# 查看当前版本
 wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         1

 wsl --set-version Ubuntu-20.04 2
正在进行转换,这可能需要几分钟时间。
操作成功完成。

E:/PowerShell via  v14.17.3 via 🐍 v3.9.7 took 59s
 wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2

docker on Windows

注意:用命令行运行来修改默认安装路径(重命名install.exe),参考教程

.\Docker.exe install --installation-dir="E:\commonSoftware\Docker"
安装完之后运行设置 * 开启开机启动 * 在Resources里修改image保存路径

使用问题

image下载失败

网络问题,clash开TUN模式

read-only file system

Error response from daemon: container df6ee73697883e8e09edd65404e1fcc19a2b4bfb49212c754a8b3ef9741d7bda: driver "overlay2" failed to remove root filesystem: unlinkat /var/lib/docker/overlay2/475c350b02589ce2cb5ef30f0619ed3aeaba409c56d87191b8cbbd00ef618fe3: read-only file system
需要管理员运行docker

C盘没空间

WSL还是超级占用C盘

端口问题

(HTTP code 500) server error - ports are not available: exposing port TCP 0.0.0.0:5432 -> 127.0.0.1:0: listen tcp 0.0.0.0:5432: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

Windows 系统(特别是启用了 Hyper-V、WSL2 或 Docker Desktop 时)会动态保留一段端口范围供内部网络服务使用。一旦端口被列入这个“排除范围(Excluded Range)”,即使没有任何程序正在监听该端口,其他应用程序(包括 Docker)也无法绑定它,从而报错 access permissions。

(finance_env) PS D:\PowerShell\github\AQTP> netsh interface ipv4 show excludedportrange protocol=tcp

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
      5314        5413
      5414        5513
      5601        5700
      5701        5800
      5801        5900
      6001        6100
      6101        6200
      6201        6300
      6342        6441
      6503        6602
      6603        6702
      6726        6825
      6826        6925
     50000       50059     *

* - Administered port exclusions.

示例:

安装 PostgreSQL 15 + TimescaleDB

docker run -d `
  --name autotrader-db `
  -p 5432:5432 `
  -e POSTGRES_PASSWORD=yahaha `
  -v H:/AutoTraderDB:/var/lib/postgresql/data `
  timescale/timescaledb:latest-pg18

docker run -d `
  --name autotrader-db-bk `
  -p 5555:5432 `
  -e POSTGRES_PASSWORD=yahaha `
  -v H:/AutoTraderDB:/var/lib/postgresql/data `
  timescale/timescaledb:latest-pg18

磁盘要在docker启动前插好,不然wsl识别不到移动磁盘

# 没插好前, wsl会分配临时空间
(finance_env) PS D:\PowerShell\github\AQTP> docker run --rm -v /h/AutoTraderDB:/data alpine df -h /data
Filesystem                Size      Used Available Use% Mounted on
/dev/sdd                136.0M    112.5M     12.9M  90% /data

# 插好后
(finance_env) PS D:\PowerShell\github\AQTP> docker run --rm -v /h/AutoTraderDB:/data alpine df -h /data
Filesystem                Size      Used Available Use% Mounted on
H:\                     931.1G    602.1G    329.0G  65% /data

参考文献

https://blog.csdn.net/Antarctic_Bear/article/details/123489609