Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.0.0
Description
When Docker container startup fails, then the cause is not visible for users, because the container is immediately destroyed.
I see 2 possible solutions/improvements here:
- add a container config option to not remove the container if the start fails (or another possible behavior is to not remove the container at all)
- if container start fails, then read container logs (ContainerApi.attach(String, AttachOptions)) and log them on some suitable level (IMO somewhere between DEBUG and WARN).
Following code comes from DockerComputeServiceAdapter and is responsible for the current behavior:
logger.debug(">> starting container(%s) with hostConfig(%s)", container.id(), hostConfig); api.getContainerApi().startContainer(container.id(), hostConfig); logger.trace("<< started(%s)", container.id()); container = api.getContainerApi().inspectContainer(container.id()); if (container.state().exitCode() != 0) { destroyNode(container.id()); throw new IllegalStateException(String.format("Container %s has not started correctly", container.id())); } // .... @Override public void destroyNode(String id) { api.getContainerApi().removeContainer(id, RemoveContainerOptions.Builder.force(true)); }
nacx Which solution do you prefer (config option to not remove container, logging the container logs, both options)?