docker(install): lima install diagnostics for Docker provisioning failures

Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax
2026-04-16 22:18:32 +02:00
parent 3c03d1910f
commit 964c3b5ae3
2 changed files with 41 additions and 11 deletions

View File

@@ -231,6 +231,7 @@ provision:
script: |
#!/bin/bash
set -eux -o pipefail
archiveInstallLog=/var/log/docker-actions-toolkit-archive-install.log
command -v docker >/dev/null 2>&1 && exit 0
if [ ! -e /etc/systemd/system/docker.socket.d/override.conf ]; then
mkdir -p /etc/systemd/system/docker.socket.d
@@ -248,12 +249,14 @@ provision:
fi
export DEBIAN_FRONTEND=noninteractive
if [ "{{srcType}}" == "archive" ]; then
curl -fsSL https://get.docker.com | sh -s -- --channel {{srcArchiveChannel}} --version {{srcArchiveVersion}}
sed -i 's|^ExecStart=.*|ExecStart=/usr/bin/dockerd -H fd://{{#if localTCPPort}} -H tcp://0.0.0.0:2375{{/if}} --containerd=/run/containerd/containerd.sock|' /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker
systemctl status docker.socket || true
systemctl status docker.service || true
{
curl -fsSL https://get.docker.com | sh -s -- --channel {{srcArchiveChannel}} --version {{srcArchiveVersion}}
sed -i 's|^ExecStart=.*|ExecStart=/usr/bin/dockerd -H fd://{{#if localTCPPort}} -H tcp://0.0.0.0:2375{{/if}} --containerd=/run/containerd/containerd.sock|' /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker
systemctl status docker.socket || true
systemctl status docker.service || true
} 2>&1 | tee "$archiveInstallLog"
elif [ "{{srcType}}" == "image" ]; then
arch=$(uname -m)
case $arch in

View File

@@ -326,6 +326,7 @@ export class Install {
try {
await Exec.exec(`limactl ${limaStartArgs.join(' ')}`, [], {env: envs});
} catch (e) {
await this.printDarwinDiagnostics();
fsp
.readdir(limaDir)
.then(files => {
@@ -539,11 +540,7 @@ EOF`,
}
private async tearDownDarwin(): Promise<void> {
await core.group('Docker daemon logs', async () => {
await Exec.exec('limactl', ['shell', '--tty=false', this.limaInstanceName, 'sudo', 'journalctl', '-u', 'docker.service', '-l', '--no-pager']).catch(() => {
core.warning(`Failed to get Docker daemon logs`);
});
});
await this.printDarwinDiagnostics();
await core.group('Stopping lima instance', async () => {
await Exec.exec('limactl', ['stop', '--tty=false', this.limaInstanceName, '--force']);
});
@@ -558,6 +555,36 @@ EOF`,
});
}
private async printDarwinDiagnostics(): Promise<void> {
await this.printDarwinGuestCommandOutput('Cloud-init output log', ['sudo', 'cat', '/var/log/cloud-init-output.log']);
await this.printDarwinGuestCommandOutput('Cloud-init status', ['sudo', 'timeout', '300s', 'cloud-init', 'status', '--wait']);
await this.printDarwinGuestCommandOutput('Docker unit file', ['sudo', 'systemctl', 'cat', 'docker.service']);
await this.printDarwinGuestCommandOutput('Docker service status', ['sudo', 'systemctl', 'status', 'docker.service', 'docker.socket', '-l', '--no-pager']);
await this.printDarwinGuestCommandOutput('Archive install script log', ['sudo', 'cat', '/var/log/docker-actions-toolkit-archive-install.log']);
await this.printDarwinGuestCommandOutput('Docker daemon logs', ['sudo', 'journalctl', '-u', 'docker.service', '-l', '--no-pager']);
}
private async printDarwinGuestCommandOutput(title: string, args: string[]): Promise<void> {
await core.group(title, async () => {
const res = await Exec.getExecOutput('limactl', ['shell', '--tty=false', this.limaInstanceName, ...args], {
ignoreReturnCode: true,
silent: true
}).catch(error => {
core.info(`Failed to get ${title}: ${error}`);
return undefined;
});
if (!res) {
return;
}
const output = [res.stdout.trim(), res.stderr.trim()].filter(Boolean).join('\n');
if (output.length > 0) {
core.info(output);
} else if (res.exitCode !== 0) {
core.info(`${title} exited with code ${res.exitCode}`);
}
});
}
private async tearDownLinux(): Promise<void> {
await core.group('Docker daemon logs', async () => {
core.info(fs.readFileSync(path.join(this.runDir, 'dockerd.log'), {encoding: 'utf8'}));