Stop a Docker container after executing code

In order to get a deeper insight into Docker I created a dockerfile that executes a python script. It works fine but after the execution of the script the container crashes. How can I modify my dockerfile in order to destroy the container after execution instead of letting the container crash and restart all the time?

Dockerfile:

  • How to pass arguments to Shell Script through docker run
  • Can't access to docker mongo without being root
  • Docker: Set value of ENV variable using RUN command?
  • How to use distribute classes with Apache Spark (pyspark) & Docker
  • Can docker write to a cd?
  • docker-machine cant connect to host/daemon and using insecure registry
  • FROM python:3
    
    ADD aa.py /
    
    CMD [ "python", "./aa.py" ]
    

    Python:

    print('Hello!')
    

    Error message:

    2017-06-14 11:37:09 [CELL/0] OUT Starting health monitoring of container
    2017-06-14 11:37:09 [APP/PROC/WEB/0] OUT Hello!
    2017-06-14 11:37:09 [APP/PROC/WEB/0] OUT Exit status 0
    2017-06-14 11:37:09 [CELL/0] OUT Exit status 143
    2017-06-14 11:37:09 [CELL/0] OUT Destroying container
    2017-06-14 11:37:09 [API/0] OUT Process has crashed with type: "web"
    2017-06-14 11:37:09 [API/0] OUT App instance exited with guid 6fdede46-6751-4725-ad78-b76262dbe701 payload: {"instance"=>"", "index"=>0, "reason"=>"CRASHED", "exit_description"=>"2 error(s) occurred:\n\n* 2 error(s) occurred:\n\n* Codependent step exited\n* cancelled\n* cancelled", "crash_count"=>4, "crash_timestamp"=>1497433029411246770, "version"=>"98e2a035-e38f-4169-95fb-2701c8486e9c"}
    2017-06-14 11:37:09 [CELL/0] OUT Successfully destroyed container
    2017-06-14 11:38:31 [CELL/0] OUT Creating container
    

  • docker blockio can not monitor when using dd to test
  • What's the difference between “docker stop” and “docker rm”?
  • Ping docker containers on different hosts with ip addresses
  • Yesod Persona authentication problems when using Dockerized MongoDB
  • Unable to push Docker (1.10.2) image to Artifactory through reverse proxy Nginx , error 'Unknown Blob'
  • How can I use Hashicorp Vault to manage my application secrets?
  • One Solution collect form web for “Stop a Docker container after executing code”

    Note: the default CMD for python:3 is python3.

    exit code 143 means SIGTERM as mentioned here. That is what docker sends.
    So you need for your python3 application to process SIGTERM signal gracefully

    Don’t forget that your python app, once completed and exited the main function, would cause the container to automatically stop and exit.

    The OP adds in the comments:

    In the meantime, I have found out that handling the SIGTERM in the Docker environment works perfectly fine.

    However using the same code in Docker on CloudFoundry does not prevent the container from crashing.
    In CloudFoundry you need an application that is always running and not just doing a task and then stopping like a script does.
    Even stopping without errors is detected as a crash in CloudFoundry.

    I transformed my script into a REST server by using the flask framework. Now it is always running but only doing its task when being called via its url.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.