Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

  • How do I find why the command is failing?
  • Is there any place where I could see a log file or something that help me to identify and fix the error?

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

like image 275
ReynierPM Avatar asked Oct 18 '16 18:10

ReynierPM


People also ask

What is the cause of exit code 0 for a container?

Exit code 0 indicates that the specific container does not have a foreground process attached. This exit code is the exception to all the other exit codes to follow.

How do I stop docker containers from exiting?

If there's no terminal attached, then your shell process will exit, and so the container will exit. You can stop this by adding --interactive --tty (or just -it ) to your docker run ... command, which will let you type commands into the shell.

How do I get out of container without exit?

Press Ctrl-P, followed by Ctrl-Q, to detach from your connection. You'll be dropped back into your shell but the previously attached process will remain alive, keeping your container running.

How do I exit docker without killing it?

To stop a container, use CTRL-c . This key sequence sends SIGKILL to the container. If --sig-proxy is true (the default), CTRL-c sends a SIGINT to the container. If the container was run with -i and -t , you can detach from a container and leave it running using the CTRL-p CTRL-q key sequence.


2 Answers

This is what helped me to resolve this issue: Under one of your services in the docker-compose yaml file, type in the following:

tty: true so it'll look like

version: '3'

services: 
   web: 
     tty: true

Hopefully this helps someone; thumps up if it helps you :)

like image 194
pelican Avatar answered Sep 20 '22 18:09

pelican


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 "$@"
like image 45
VladoDemcak Avatar answered Sep 19 '22 18:09

VladoDemcak