Healthy
[Finalizado Pelo Aluno]

Olá Prof Carlos!
Alguma ideia de como podemos aplicar o conceito de healthy (para checkar a saude) no container app?
Pode incluir no seu docker-compose.yml:
healthcheck:
test: ["CMD", "curl", "-f", "http://host.docker.internal:3000/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s

INCLUÍ... MAS ESTÁ DAR STATUS UNHEALTY. AQUI ESÁ O MEU DOCKER-COMPOSE
services:
# sige v2 image
app:
build:
context: .
dockerfile: Dockerfile
container_name: sige-v2-app
restart: always
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- sige_v2_network
healthcheck:
test: ["CMD", "curl", "-f", "http://host.docker.internal:3000/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
# nginx
nginx:
container_name: sige-v2-nginx
image: nginx:alpine
restart: always
ports:
- "8000:80"
volumes:
- ./:/var/www
- ./docker/nginx/:/etc/nginx/conf.d/
networks:
- sige_v2_network
# mysql
mysql:
container_name: sige-v2-mysql
image: mysql:5.7.22
# platform: linux/x86_64
restart: always
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
volumes:
- ./.docker/mysql/dbdata:/var/lib/mysql
ports:
- "3389:3306"
networks:
- sige_v2_network
# redis
redis:
container_name: sige-v2-redis
image: redis:latest
networks:
- sige_v2_network
# queue
queue:
build:
context: .
dockerfile: Dockerfile
container_name: sige-v2-queue
restart: always
command: "php artisan queue:work"
volumes:
- ./:/var/www
depends_on:
- redis
- app
networks:
- sige_v2_network
# schedule
schedule:
build:
context: .
dockerfile: Dockerfile
container_name: sige-v2-schedule
restart: always
command: "php artisan schedule:work"
volumes:
- ./:/var/www
depends_on:
- redis
- app
networks:
- sige_v2_network
networks:
sige_v2_network:
driver: bridge

ESTE É O FICHEIRO LARAVEL.CONF
server {
listen 80;
index index.php;
root /var/www/public;
client_max_body_size 51g;
client_body_buffer_size 512k;
client_body_in_file_only clean;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}

Precisa criar a rota /health na sua aplicação, ou no seu nginx
Outra, se o seu container do nginx está expondo a porta 8090 por exemplo, o seu health check precisa bater nessa porta.

TIVE QUE ACRESCENTAR ISSO PARA FUNCIONAR:
extra_hosts:
- "host.docker.internal:host-gateway"
DOCKER-COMPOSE.YML FINAL:
services:
# sige v2 image
app:
build:
context: .
dockerfile: Dockerfile
container_name: sige-v2-app
extra_hosts:
- "host.docker.internal:host-gateway"
restart: always
working_dir: /var/www/
volumes:
- ./:/var/www
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
networks:
- sige_v2_network
healthcheck:
test: ["CMD", "curl", "-f", "http://host.docker.internal:8000/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
# nginx
nginx:
container_name: sige-v2-nginx
image: nginx:alpine
restart: always
ports:
- "8000:80"
volumes:
- ./:/var/www
- ./docker/nginx/:/etc/nginx/conf.d/
networks:
- sige_v2_network
# mysql
mysql:
container_name: sige-v2-mysql
image: mysql:5.7.22
# platform: linux/x86_64
restart: always
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
volumes:
- ./.docker/mysql/dbdata:/var/lib/mysql
ports:
- "3389:3306"
networks:
- sige_v2_network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u${DB_USERNAME}", "-p${DB_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 5
# redis
redis:
container_name: sige-v2-redis
image: redis:latest
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 1s
timeout: 3s
retries: 30
networks:
- sige_v2_network
# queue
queue:
# build:
# context: .
# dockerfile: Dockerfile
image: sige-v2-app # Reuse image
container_name: sige-v2-queue
restart: always
command: "php artisan queue:work"
volumes:
- ./:/var/www
depends_on:
- redis
- app
networks:
- sige_v2_network
# schedule
schedule:
# build:
# context: .
# dockerfile: Dockerfile
image: sige-v2-app # Reuse image
container_name: sige-v2-schedule
restart: always
command: "php artisan schedule:work"
volumes:
- ./:/var/www
depends_on:
- redis
- app
networks:
- sige_v2_network
networks:
sige_v2_network:
driver: bridge
---------------------------------------------------------------------------------------
OBRIGADO!

Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!