docker-composeヘルスチェックログを表示する方法
私のdocker-compose.yml
、次のservice
healthcheck
セクションがあります。 MariaDBが実際にクエリを処理する準備ができているかどうかを知りたいです。 service
という名前のcmd
は、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
このヘルスチェックは機能せず、サービスが異常であることを示しています。
test
CMDの出力を確認するにはどうすればよいですか?
以下を使用できます。
docker inspect --format "{{json .State.Health }}" <container name> | jq
出力:
{
"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"
outputセクションを探します。
出力のみを取得するには:
docker inspect --format "{{json .State.Health }}" mariadb_db_1 | jq '.Log[].Output'
Json pretty printに使用するツールにjq
を自由に交換してください。
docker-compose ps
は、ヘルスチェックが定義されている場合、ヘルスを含む各サービスのステータスを示します。基本的な概要に適しています。
% docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------------------------------------------------------
remix-theme-editor_analytics_1 /bin/sh -c /analytics/run. ... Up
remix-theme-editor_base_1 /bin/bash Exit 0
remix-theme-editor_flower_1 /entrypoint --environment ... Exit 137
remix-theme-editor_frontend_1 /bin/sh -c Perl -p -i -e ' ... Exit 137
remix-theme-editor_js-app_1 npm run Exit 0
remix-theme-editor_mq_1 docker-entrypoint.sh rabbi ... Up (healthy) 15671/tcp, 15672/tcp, 25672/tcp, 4369/tcp, 5671/tcp, 5672/tcp
remix-theme-editor_mysql-migration_1 /entrypoint_mysql-migratio ... Exit 0
remix-theme-editor_mysql_1 /bin/sh -c /entrypoint_wra ... Up (health: starting) 127.0.0.2:3308->3306/tcp
remix-theme-editor_page-renderer_1 npm run start:watch Up
remix-theme-editor_python-app_1 /entrypoint Exit 2
remix-theme-editor_redis_1 docker-entrypoint.sh /bin/ ... Up (health: starting) 6379/tcp
remix-theme-editor_scheduler_1 /entrypoint --environment ... Exit 137
remix-theme-editor_socket_1 /entrypoint --environment ... Exit 1
remix-theme-editor_static-builder_1 npm run watch Up
remix-theme-editor_static-http_1 nginx -g daemon off; Up 127.0.0.2:6544->443/tcp, 80/tcp
remix-theme-editor_web_1 /entrypoint --environment ... Exit 1
remix-theme-editor_worker_1 /entrypoint --environment ... Exit 1
remix-theme-editor_worker_screenshots_1 /entrypoint --environment ... Exit 1
さらに詳細が必要な場合は、docker inspect
と組み合わせてdocker ps -q <service-name>
を使用してください。
% docker inspect --format "{{json .State.Health }}" $(docker-compose ps -q mq) | jq
{
"Status": "starting",
"FailingStreak": 48,
"Log": [
{
"Start": "2018-10-03T00:40:18.671527745-05:00",
"End": "2018-10-03T00:40:18.71729051-05:00",
"ExitCode": -1,
"Output": "OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused \"exec: \\\"nc\\\": executable file not found in $PATH\": unknown"
},
...
ヘルスチェックコードを自分で実行するだけで、いつでもヘルスチェックをデバッグできます。例えば:
% docker exec -it $(docker-compose ps -q socket) nc -w2 127.0.0.1 5672
(UNKNOWN) [127.0.0.1] 5672 (?) : Connection refused
シェルでも同じことができます。
% docker exec -it $(docker-compose ps -q socket) bash
root@b5da5207d344:~/src# nc -w2 127.0.0.1 5672
(UNKNOWN) [127.0.0.1] 5672 (?) : Connection refused
root@b5da5207d344:~/src# echo $?
1
最後に、最初のターミナルウィンドウでdocker-compose up
を使用し、別のターミナルウィンドウでdocker-compose logs -f
を使用できます。これにより、docker-compose-managed containerからのすべてのログが表示されます。