The problem
Scripts like the following will execute each step, even if one fails:
#!/bin/bash echo "Shutting down mysqld. Please wait." # following shuts down mysql before stopping the container docker exec mysql /usr/bin/mysqladmin shutdown echo "Stopping the individual containers..." # stop the containers docker stop mysql docker stop sphinx docker stop apache
The problem with the above is that: if MySQL service does not completely shutdown (i.e., has some sort of error), there is nothing to stop the script from executing the last three steps. Without the database services stop, those will corrupt your database. (I learned this the hard way.)
One solution
The desirable solution is for the script to exit without stopping the Docker services. This can be done by making the MySQL shutdown line look like:
docker exec mysql /usr/bin/mysqladmin shutdown || \ { echo 'MySQL shutdown failed' ; exit 1; }
Note: above should all be on a single line (without the "\").
The above gives you a warning that something didn't work right and exits the script before attempting to stop the Docker containers.