Inside my docker-compose.yml
, I have the following service
healthcheck
section. I want to know if MariaDB is actually ready to handle queries. A service
named cmd
is configured to depend on condition: service_healthy
.
db:
image: mariadb:10
environment:
MYSQL_RANDOM_ROOT_PASSWORD: 1
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_DATABASE: database
healthcheck:
test: ["CMD", "mysql", "--user=user", "--password=password", "--execute='SELECT 1'", "--host=127.0.0.1", "--port=3306"]
interval: 1s
retries: 30
This healthcheck does not work, shows that the service is unhealthy.
How do I check the output of the test
CMD?
You can use:
docker inspect --format "{{json .State.Health }}" <container name> | jq
Output:
{
"Status": "unhealthy",
"FailingStreak": 63,
"Log": [
{
"Start": "2017-03-11T20:49:19.668895201+03:30",
"End": "2017-03-11T20:49:19.735722044+03:30",
"ExitCode": 1,
"Output": "ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''SELECT 1'' at line 1\n"
}
]
}
And look for the output section.
To get the Output only:
docker inspect --format "{{json .State.Health }}" mariadb_db_1 | jq '.Log[].Output'
For swarm mode use the folling format (thanks for pointing it out @shotgunner):
{{json.Spec.TaskTemplate.ContainerSpec.Healthcheck}}
Feel free to swap jq
for whatever tool you use for json pretty print.