Documentation
¶
Index ¶
- Constants
- type Config
- type WSLProvisioner
- func (p *WSLProvisioner) DistroIP(ctx context.Context) string
- func (p *WSLProvisioner) Download(ctx context.Context, progress types.ProgressFunc) error
- func (p *WSLProvisioner) Endpoint() string
- func (p *WSLProvisioner) HealthCheck(ctx context.Context) error
- func (p *WSLProvisioner) Install(ctx context.Context, progress types.ProgressFunc) error
- func (p *WSLProvisioner) Start(ctx context.Context) (string, error)
- func (p *WSLProvisioner) Status(ctx context.Context) (*types.RuntimeStatus, error)
- func (p *WSLProvisioner) Stop(ctx context.Context) error
- func (p *WSLProvisioner) Uninstall(ctx context.Context) error
Constants ¶
View Source
const ( // DefaultDistro 是导入到 WSL 的发行版名称。 DefaultDistro = "gobrave-ubuntu-docker" // DefaultRootfsName 是下载到本地缓存的 rootfs 包文件名。 DefaultRootfsName = "gobrave-ubuntu-docker-amd64.tar" // DefaultDaemonPort 是 WSL 内 dockerd 监听的 TCP 端口。 DefaultDaemonPort = 2375 // DefaultEndpoint 是 Windows 平台上自管 dockerd 的默认地址。 DefaultEndpoint = "tcp://localhost:2375" )
发行版与文件命名常量。
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
// BaseDir 是 storage.base_dir;发行版数据放在 <BaseDir>/wsl。
BaseDir string
// DownloadURL rootfs 包下载地址。
DownloadURL string
// Distro 发行版名,默认 DefaultDistro。
Distro string
// Endpoint daemon 地址,默认 DefaultEndpoint(tcp://localhost:2375);
// 仅支持 tcp://,取值形如 tcp://localhost:2375。
Endpoint string
// HTTPClient 用于下载;nil 时使用内置 client(大文件不设总超时)。
HTTPClient *http.Client
}
Config 是 WSL 发行版预置的构造参数。
type WSLProvisioner ¶
type WSLProvisioner struct {
// contains filtered or unexported fields
}
WSLProvisioner 是 types.Provisioner 在 Windows + WSL 上的实现。
func (*WSLProvisioner) DistroIP ¶
func (p *WSLProvisioner) DistroIP(ctx context.Context) string
DistroIP 返回发行版的虚拟网卡地址(供装配层把容器发布端口映射成 Windows 可访问地址)。
故意不依赖 docker 容器 IP(172.17.x.x):那是发行版内部的 docker0 网桥, Windows 根本无法路由。容器端口必须发布到发行版网卡(-p 0.0.0.0:port) 后再通过 Windows → 发行版 IP 访问。
func (*WSLProvisioner) Download ¶
func (p *WSLProvisioner) Download(ctx context.Context, progress types.ProgressFunc) error
Download 下载 rootfs 包(支持断点续传 + sha256 校验)。
func (*WSLProvisioner) Endpoint ¶
func (p *WSLProvisioner) Endpoint() string
Endpoint 返回最近一次成功解析的 endpoint(可能为空)。
func (*WSLProvisioner) HealthCheck ¶
func (p *WSLProvisioner) HealthCheck(ctx context.Context) error
HealthCheck 探测当前 endpoint。
func (*WSLProvisioner) Install ¶
func (p *WSLProvisioner) Install(ctx context.Context, progress types.ProgressFunc) error
Install 让发行版就绪并完成 dockerd 初始化。
两条路径:
- 系统上已有同名发行版(Registered):直接接管,校验/启动 dockerd,不下载不导入;
- 否则:要求已 Download,执行 wsl --import 后再初始化。
导入路径的任何一步失败都会尽力回滚(注销发行版),避免留下半安装状态; 接管路径失败时绝不注销用户自己的发行版。
func (*WSLProvisioner) Start ¶
func (p *WSLProvisioner) Start(ctx context.Context) (string, error)
Start 确保运行时可用并返回 endpoint。
这是每次进程启动都会调用的入口,满足以下约束:
- 未安装但系统上已有同名发行版时,直接接管(启动 dockerd)而不是返回 ErrNotInstalled;
- 发行版既未安装也不存在时返回 ErrNotInstalled,不做任何修复;
- 已安装时幂等:daemon 已在跑就只探活,不重复启动。
func (*WSLProvisioner) Status ¶
func (p *WSLProvisioner) Status(ctx context.Context) (*types.RuntimeStatus, error)
Status 探测当前状态,不产生副作用。
判定顺序:未下载 → 已下载未安装 → 已安装(再看 daemon 是否运行)。
Click to show internal directories.
Click to hide internal directories.