diff --git a/__tests__/docker/install.test.itg.ts b/__tests__/docker/install.test.itg.ts index 4d0dde9..a8a901f 100644 --- a/__tests__/docker/install.test.itg.ts +++ b/__tests__/docker/install.test.itg.ts @@ -19,6 +19,7 @@ import {jest, describe, expect, test, beforeEach, afterEach} from '@jest/globals import {Install} from '../../src/docker/install'; import {Docker} from '../../src/docker/docker'; +import {Exec} from '../../src/exec'; // prettier-ignore const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-install-jest'); @@ -40,6 +41,17 @@ aarch64:https://cloud.debian.org/images/cloud/bookworm/20231013-1532/debian-12-g // prettier-ignore test.each(['v24.0.4'])( 'install docker %s', async (version) => { + if (process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) { + // Remove containerd first on ubuntu runners to make sure it takes + // ones packaged with docker + await Exec.exec('sudo', ['apt-get', 'remove', '-y', 'containerd.io'], { + env: Object.assign({}, process.env, { + DEBIAN_FRONTEND: 'noninteractive' + }) as { + [key: string]: string; + } + }); + } await expect((async () => { const install = new Install({ version: version, diff --git a/src/docker/assets.ts b/src/docker/assets.ts index fd42cf1..15e39c2 100644 --- a/src/docker/assets.ts +++ b/src/docker/assets.ts @@ -79,6 +79,9 @@ if (Get-Service docker -ErrorAction SilentlyContinue) { Write-Host "Service removed" } +$env:Path = "$ToolDir;" + [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") +Write-Host "Path: $env:Path" + $env:DOCKER_HOST = $DockerHost Write-Host "DOCKER_HOST: $env:DOCKER_HOST" diff --git a/src/docker/install.ts b/src/docker/install.ts index d3243cb..46af76c 100644 --- a/src/docker/install.ts +++ b/src/docker/install.ts @@ -253,6 +253,12 @@ export class Install { }); } + const envs = Object.assign({}, process.env, { + PATH: `${this.toolDir}:${process.env.PATH}` + }) as { + [key: string]: string; + }; + await core.group('Start Docker daemon', async () => { const bashPath: string = await io.which('bash', true); const cmd = `${this.toolDir}/dockerd --host="${dockerHost}" --config-file="${daemonConfigPath}" --exec-root="${this.runDir}/execroot" --data-root="${this.runDir}/data" --pidfile="${this.runDir}/docker.pid" --userland-proxy=false`; @@ -262,11 +268,12 @@ export class Install { // avoid killing it when the action finishes running. Even if detached, // we also need to run dockerd in a subshell and unref the process so // GitHub Action doesn't wait for it to finish. - `sudo -E ${bashPath} << EOF + `sudo env "PATH=$PATH" ${bashPath} << EOF ( ${cmd} 2>&1 | tee "${this.runDir}/dockerd.log" ) & EOF`, [], { + env: envs, detached: true, shell: true, stdio: ['ignore', process.stdout, process.stderr] @@ -280,7 +287,7 @@ EOF`, try { await Exec.getExecOutput(`docker version`, undefined, { silent: true, - env: Object.assign({}, process.env, { + env: Object.assign({}, envs, { DOCKER_HOST: dockerHost }) as { [key: string]: string;