diff --git a/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap b/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap index ce832abf7f4ac26dbbc001bb43b731ec4a6ec7d1..52534d46a332fbe9ccc13aa5931cf60af70f9e47 100644 --- a/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap @@ -20,7 +20,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_ruby -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_ruby -aq", "options": Object { "encoding": "utf-8", }, @@ -65,7 +65,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_ruby -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_ruby -aq", "options": Object { "encoding": "utf-8", }, @@ -110,7 +110,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_ruby -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_ruby -aq", "options": Object { "encoding": "utf-8", }, @@ -156,7 +156,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_ruby -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_ruby -aq", "options": Object { "encoding": "utf-8", }, diff --git a/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap b/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap index 687c058818d9a3235d68db7237f5afe134837d0e..ef9ee459f6b7488b7745a14a88a250df0a402a3c 100644 --- a/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap @@ -64,7 +64,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_rust -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_rust -aq", "options": Object { "encoding": "utf-8", }, diff --git a/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap b/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap index c1a5c53081d975f83d3e348711437365b1842f3d..9cd4619c1a3ebaedbd8d5c842d2b40f2b32fb13b 100644 --- a/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap @@ -28,7 +28,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_cocoapods -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_cocoapods -aq", "options": Object { "encoding": "utf-8", }, @@ -68,7 +68,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_cocoapods -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_cocoapods -aq", "options": Object { "encoding": "utf-8", }, @@ -182,7 +182,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_cocoapods -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_cocoapods -aq", "options": Object { "encoding": "utf-8", }, @@ -245,7 +245,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_cocoapods -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_cocoapods -aq", "options": Object { "encoding": "utf-8", }, diff --git a/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap b/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap index fe23b9deeac7d8c89f33f15da67f76d5cdb1e6f0..a7479466237f3f363a80adc57a9afdb0e4546420 100644 --- a/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap @@ -100,7 +100,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_composer -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_composer -aq", "options": Object { "encoding": "utf-8", }, diff --git a/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap b/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap index 6def232ae65c7e0c8cc989e17ff312c5f86e294e..245615173fb138b9c2fe38226f5c52415f4d3955 100644 --- a/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap @@ -76,7 +76,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_go -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_go -aq", "options": Object { "encoding": "utf-8", }, @@ -114,7 +114,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_go -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_go -aq", "options": Object { "encoding": "utf-8", }, @@ -141,7 +141,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_go -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_go -aq", "options": Object { "encoding": "utf-8", }, @@ -179,7 +179,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_go -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_go -aq", "options": Object { "encoding": "utf-8", }, diff --git a/lib/manager/gradle/__snapshots__/index.spec.ts.snap b/lib/manager/gradle/__snapshots__/index.spec.ts.snap index b979d1c73003e0aa60ea9c420d49545416403962..4250c501d976f7ed833ea8c2a65fda9332f38c1d 100644 --- a/lib/manager/gradle/__snapshots__/index.spec.ts.snap +++ b/lib/manager/gradle/__snapshots__/index.spec.ts.snap @@ -536,7 +536,13 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_gradle -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_gradle -aq", + "options": Object { + "encoding": "utf-8", + }, + }, + Object { + "cmd": "docker rm -f gradle output", "options": Object { "encoding": "utf-8", }, @@ -570,7 +576,13 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_gradle -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_gradle -aq", + "options": Object { + "encoding": "utf-8", + }, + }, + Object { + "cmd": "docker rm -f gradle output", "options": Object { "encoding": "utf-8", }, @@ -604,7 +616,13 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_gradle -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_gradle -aq", + "options": Object { + "encoding": "utf-8", + }, + }, + Object { + "cmd": "docker rm -f gradle output", "options": Object { "encoding": "utf-8", }, diff --git a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap index 69c24bd4bcff78fe76fc13810d1f73a11807fc37..e4f4a7327b8465375b0c42c69a787cf043e44896 100644 --- a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap @@ -66,7 +66,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_pipenv -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_pipenv -aq", "options": Object { "encoding": "utf-8", }, diff --git a/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap b/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap index 1dbbe193b95cc8c2e48680c2d8e99523c238f103..bc01d94f1fdf7c41734fdf9fcc0889923366ee27 100644 --- a/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap @@ -65,7 +65,7 @@ Array [ }, }, Object { - "cmd": "docker ps --filter name=renovate_poetry -aq | xargs --no-run-if-empty docker rm -f", + "cmd": "docker ps --filter name=renovate_poetry -aq", "options": Object { "encoding": "utf-8", }, diff --git a/lib/util/exec/__snapshots__/exec.spec.ts.snap b/lib/util/exec/__snapshots__/exec.spec.ts.snap index 139bf9040e6ed2239482d7b95a2745dc741760d5..98e090c4ea550e2cf4c16901c77620446d56e4b2 100644 --- a/lib/util/exec/__snapshots__/exec.spec.ts.snap +++ b/lib/util/exec/__snapshots__/exec.spec.ts.snap @@ -6,16 +6,16 @@ Array [ "echo hello", "docker ps --filter label=renovate_child -aq | xargs --no-run-if-empty docker rm -f", "docker pull example/image", - "docker ps --filter name=example_image -aq | xargs --no-run-if-empty docker rm -f", + "docker ps --filter name=example_image -aq", "docker run --rm --name=example_image --label=renovate_child example/image bash -l -c \\"echo hello\\"", - "docker ps --filter name=example_image -aq | xargs --no-run-if-empty docker rm -f", + "docker ps --filter name=example_image -aq", "docker run --rm --name=example_image --label=renovate_child example/image bash -l -c \\"echo hello\\"", "echo hello", "echo hello", "docker ps --filter label=renovate_child -aq | xargs --no-run-if-empty docker rm -f", - "docker ps --filter name=example_image -aq | xargs --no-run-if-empty docker rm -f", + "docker ps --filter name=example_image -aq", "docker run --rm --name=example_image --label=renovate_child example/image bash -l -c \\"echo hello\\"", - "docker ps --filter name=example_image -aq | xargs --no-run-if-empty docker rm -f", + "docker ps --filter name=example_image -aq", "docker run --rm --name=example_image --label=renovate_child example/image bash -l -c \\"echo hello\\"", ] `; diff --git a/lib/util/exec/docker/index.ts b/lib/util/exec/docker/index.ts index eec51223d610c206da8f1d9e2e044fa43a971320..f8bda74ccb8073e6730ac160a93d4518fe313a8c 100644 --- a/lib/util/exec/docker/index.ts +++ b/lib/util/exec/docker/index.ts @@ -114,23 +114,28 @@ function getContainerName(image: string): string { export async function removeDockerContainer(image): Promise<void> { const containerName = getContainerName(image); + let cmd = `docker ps --filter name=${containerName} -aq`; try { - const res = await rawExec( - `docker ps --filter name=${containerName} -aq | xargs --no-run-if-empty docker rm -f`, - { encoding: 'utf-8' } - ); - if (res?.stdout?.trim().length) { - const containerId = res.stdout.trim(); - logger.info( - { image, containerName, containerId }, - 'Finished Docker container removal' - ); + const res = await rawExec(cmd, { + encoding: 'utf-8', + }); + const containerId = res?.stdout?.trim() || ''; + // istanbul ignore if + if (containerId.length) { + logger.debug({ containerId }, 'Removing container'); + cmd = `docker rm -f ${containerId}`; + await rawExec(cmd, { + encoding: 'utf-8', + }); } else { logger.trace({ image, containerName }, 'No running containers to remove'); } } catch (err) /* istanbul ignore next */ { logger.trace({ err }, 'removeDockerContainer err'); - logger.info({ image, containerName }, 'Could not remove Docker container'); + logger.info( + { image, containerName, cmd }, + 'Could not remove Docker container' + ); } } diff --git a/lib/util/exec/exec.spec.ts b/lib/util/exec/exec.spec.ts index b2a5446dc1cde332584b7133dc387587fb6f2903..3dd6c80716a2ee3eb1f859295919e64b5e0c036c 100644 --- a/lib/util/exec/exec.spec.ts +++ b/lib/util/exec/exec.spec.ts @@ -74,7 +74,7 @@ describe(`Child process execution wrapper`, () => { const docker = { image }; const processEnv = envMock.full; const dockerPullCmd = `docker pull ${image}`; - const dockerRemoveCmd = `docker ps --filter name=${name} -aq | xargs --no-run-if-empty docker rm -f`; + const dockerRemoveCmd = `docker ps --filter name=${name} -aq`; const dockerPullOpts = { encoding }; const dockerRemoveOpts = dockerPullOpts;