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 的手动安装步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看当前版本
❯ 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),参考教程

1
.\Docker.exe install --installation-dir="E:\commonSoftware\Docker"

安装完之后运行设置

  • 开启开机启动
  • 在Resources里修改image保存路径

使用问题

image下载失败

网络问题,clash开TUN模式

read-only file system

1
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盘

端口问题

1
(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。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(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

1
2
3
4
5
6
7
8
9
10
11
12
13
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识别不到移动磁盘

1
2
3
4
5
6
7
8
9
# 没插好前, 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

Author

Shaojie Tan

Posted on

2023-04-14

Updated on

2026-03-04

Licensed under