aws-cloudformation/cloudformation-cli-python-plugin

Docker errors are hidden

ericzbeard opened this issue · 2 comments

In codegen.py, auto_remove is set to True when running the pip install command. This results in the process exiting before stderr can be read, so for example you see something like this:

docker.errors.ContainerError: Command 'pip install --no-cache-dir --no-color --disable-pip-version-check --upgrade --requirement /project/requirements.txt --target /project/build' in image 'public.ecr.aws/lambda/python:3.7' returned non-zero exit status 1

If you change it to auto_remove=False, you get a useful error message:

docker.errors.ContainerError: Command 'pip install --no-cache-dir --no-color --disable-pip-version-check --upgrade --requirement /project/requirements.txt --target /project/build' in image 'public.ecr.aws/lambda/python:3.7' returned non-zero exit status 1: b"ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device: '/tmp/pip-unpack-zw24lvnb'\n\n"

(The fix for this particular error is to run docker image prune)

#214 should resolve

Repro

import docker
client = docker.from_env()
client.containers.run('alpine:2.7', 'echo hello world')
b'hello world\n'

client.containers.run('alpine:2.7', 'echo hello world', auto_remove=True)
<Trace removed>
HTTPError: 404

client.containers.run('alpine:2.7', 'echo hello world', remove=True)
b'hello world\n'

Some details related to the docker-py package:
docker/docker-py#2684
docker/docker-py#2503