Elasticsearch docker container shows "unhealthy"

my elasticsearchdocker container shows "unhealthy status" on ec2 ubuntu

1e6908aa941e   docker.elastic.co/elasticsearch/elasticsearch:8.3.2   "/bin/tini -- /usr/l…"   7 weeks ago   Up 7 weeks (unhealthy)    9200/tcp, 9300/tcp                                    elk_es03_1
c666fe1bf58f   docker.elastic.co/elasticsearch/elasticsearch:8.3.2   "/bin/tini -- /usr/l…"   7 weeks ago   Up 23 hours (unhealthy)   9200/tcp, 9300/tcp                                    elk_es02_1
6032fbeb6e22   docker.elastic.co/elasticsearch/elasticsearch:8.3.2   "/bin/tini -- /usr/l…"   7 weeks ago   Up 23 hours (unhealthy)   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 9300/tcp   elk_es01_1
8e6939939440   docker.elastic.co/elasticsearch/elasticsearch:8.3.2   "/bin/tini -- /usr/l…"   7 weeks ago   Up 7 weeks (healthy)      9200/tcp, 9300/tcp                                    elk_setup_1

but when I run GET _cat/health?v

GET _cluster/health

GET _cat/nodes?v

it shows green

❯ curl -XGET "1.1.1.1:9200/_cluster/health"
{"cluster_name":"docker-cluster","status":"green","timed_out":false,"number_of_nodes":3,"number_of_data_nodes":3,"active_primary_shards":24,"active_shards":48,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":0,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":100.0}%
curl -XGET "1.1.1.1:9200/_cat/nodes?v"
ip         heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
......           26         100   5    0.23    0.23     0.25 cdfhilmrstw -      es03
......           27         100   5    0.23    0.23     0.25 cdfhilmrstw -      es01
......          66         100   5    0.23    0.23     0.25 cdfhilmrstw *      es02

the container still shows "unhealthy" status and elasticsearch got exited once.
how can I recover the container health status?