dockerdocker-composeexitentry-pointdocker-container

How to deal with state "Exit 0" in Docker


I have build a Docker image and afterwards run a container using Docker Compose. The following command will do the job for me:

docker-compose up -d

I have restarted the PC and now I want to start the previous container that I've created before. So I have tried the following command:

$ docker-compose start 
Starting php-apache ... done

Apparently it works but it doesn't as per the output for the following command:

$ docker-compose ps
          Name                         Command               State    Ports 
---------------------------------------------------------------------------
php55devwork_php-apache_1   /bin/sh -c bash -C '/usr/l ...   Exit 0        

For sure something is wrong and I am trying to find out what.

Here is the repository if you want to give it a try.

Update

If I remove the container: docker rm <container-id> and recreate it by running docker-compose up -d --build it works again.

Update #1

I am not able to see such weird characters:

enter image description here


Solution

  • I took a look into your Docker github and setup_php_settings on line (line n. 27) there is source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND

    and that runs apache2 on foreground so it shouldn't exit with status code 0.

    But it seems to me like your setup_php_settings contains some weird character (when I run your image with compose) (original is one on right side) weird character I have changed it to new lines and it worked for me. Let us know if it helped.

    If you want to debug your docker container you can run it without entrypoint like:

    docker run -it yourImage bash


    -- AFTER some investigation:

    There were still some errors when I restart docker container - like in your case stopped container and start after reboot. There were problems: symbolic links already exist and apache2 has grumpy PID so we need to do something like in oficial php docker

    This is full setup_php_settings worked for me after container restart.

    #!/bin/bash -x
    set -e
    
    PHP_ERROR_REPORTING=${PHP_ERROR_REPORTING:-"E_ALL & ~E_DEPRECATED & ~E_NOTICE"}
    sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/apache2/php.ini
    sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/cli/php.ini
    sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/apache2/php.ini
    sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/cli/php.ini
    echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/apache2/php.ini
    echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/cli/php.ini
    
    mkdir -p /data/tmp/php/uploads
    mkdir -p /data/tmp/php/sessions
    mkdir -p /data/tmp/php/xdebug
    
    chown -R www-data:www-data /data/tmp/php*
    
    ln -sf /etc/php5/mods-available/zz-php.ini /etc/php5/apache2/conf.d/zz-php.ini
    ln -sf /etc/php5/mods-available/zz-php-directories.ini /etc/php5/apache2/conf.d/zz-php-directories.ini
    
    # Add symbolic link to get Zend out of the current install dir
    ln -sf /usr/share/php/libzend-framework-php/Zend/ /usr/share/php/Zend
    
    a2enmod rewrite
    php5enmod mcrypt
    
    # Apache gets grumpy about PID files pre-existing
    : "${APACHE_PID_FILE:=${APACHE_RUN_DIR:=/var/run/apache2}/apache2.pid}"
    rm -f "$APACHE_PID_FILE"
    
    source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND "$@"