도커 디버깅은 mariadb 상태 점검을 구성합니다.
mariadb 서비스에서 상태 검사를 추가하려고 하는데 서버에 대한 클라이언트 연결이 차단되어 다음 메시지가 표시됩니다.
ERROR 2005 (HY000): Unknown MySQL server host 'mysql' (0)
연결을 설정할 수 있으며 다음 상태를 확인하지 않아도 모든 것이 정상적으로 실행됩니다.
healthcheck:
test: /usr/bin/learnintouch/db-health-check.sh
interval: 30s
timeout: 10s
retries: 3
... 상태 점검이 예상대로 작동할 경우:
root@428b1e6c7c1a:/usr/bin/learnintouch/www/folkuniversitet# /usr/bin/learnintouch/db-health-check.sh
+ /usr/bin/mysql/install/bin/mysql --protocol=tcp -h mysql -u root -pxxxxxx -e 'show databases;'
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| db_engine |
| db_learnintouch |
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
초기 작업 서비스 구성은 다음과 같습니다.
mysql:
image: localhost:5000/mariadb:10.1.24
environment:
- MYSQL_ROOT_PASSWORD=xxxxxx
networks:
- learnintouch
volumes:
- "~/dev/docker/projects/learnintouch/volumes/database/data:/usr/bin/mariadb/install/data"
- "~/dev/docker/projects/learnintouch/volumes/logs:/usr/bin/mariadb/install/logs"
deploy:
replicas: 1
restart_policy:
condition: any
delay: 5s
max_attempts: 3
window: 10s
실패한 서비스 구성은 다음과 같습니다.
mysql:
image: localhost:5000/mariadb:10.1.24
environment:
- MYSQL_ROOT_PASSWORD=xxxxxx
networks:
- learnintouch
volumes:
- "~/dev/docker/projects/learnintouch/volumes/database/data:/usr/bin/mariadb/install/data"
- "~/dev/docker/projects/learnintouch/volumes/logs:/usr/bin/mariadb/install/logs"
deploy:
replicas: 1
restart_policy:
condition: any
delay: 5s
max_attempts: 3
window: 10s
healthcheck:
test: /usr/bin/learnintouch/db-health-check.sh
interval: 30s
timeout: 10s
retries: 3
서버 시작 시,mariadb
로그는 상태 확인 여부와 상관없이 정확히 동일하며, 다음으로 끝납니다.
2017-12-29 10:27:48 139873749194560 [Note] /usr/bin/mariadb/install/bin/mysqld: ready for connections.
Version: '10.1.24-MariaDB' socket: '/usr/bin/mariadb/install/tmp/mariadb.sock' port: 3306 Source distribution
여기 있습니다.db-health-check.sh
bash 스크립트:
#!/bin/bash -x
/usr/bin/mysql/install/bin/mysql --protocol=tcp -h mysql -u root -pxxxxxx -e "show databases;" || exit 1
도커 버전입니다.
Client:
Version: 17.05.0-ce
API version: 1.29
Go version: go1.7.5
Git commit: 89658be
Built: Thu May 4 22:10:54 2017
OS/Arch: linux/amd64
Server:
Version: 17.05.0-ce
API version: 1.29 (minimum version 1.12)
Go version: go1.7.5
Git commit: 89658be
Built: Thu May 4 22:10:54 2017
OS/Arch: linux/amd64
Experimental: false
업데이트:
사실 몇 가지 문제들이 있었는데, 그것은 함께 모든 것을 혼란스럽게 만들었습니다.
첫번째는.db-health-check.sh
파일이 클라이언트 응용프로그램 컨테이너에 있으므로 서비스 데이터베이스 컨테이너가 상태 확인을 수행해야 할 때 파일을 찾을 수 없습니다.
두 번째는.db-health-check.sh
파일이 잘못된 경로를 사용했습니다.mysql
고객/usr/bin/mariadb/install/bin/mysql
.
세 번째는.db-health-check.sh
파일이 연결에 잘못된 호스트 이름을 사용했고 잘못 사용했습니다.mysql
대신에localhost
.
네 번째는.root
사용자가 에 연결할 수 없습니다.1045 (28000): Access denied for user 'root'@'localhost'
비밀번호가 없어야 하기 때문에/usr/bin/mariadb/install/bin/mysql --protocol=tcp -h localhost -u root -e "show databases;" || exit 1
.
이러한 점을 수정한 후에는 상태 점검을 실시해도 응용 프로그램이 정상적으로 시작되고 실행될 수 있습니다.
선을 더욱 흐리게 만든 한 가지는 첫 번째 건강검진이 성공적으로 통과될 때까지 서비스를 이용할 수 없다는 것이었습니다.실제로 나는 다음과 같이 히텔 체크를 구성했습니다.
healthcheck:
test: exit 0
interval: 60s
timeout: 10s
retries: 3
처음에 이를 보여주는 컨테이너 상태:
"Health": {
"Status": "starting",
"FailingStreak": 0,
"Log": []
}
60년대의 첫 번째 간격이 만료되고 상태 점검이 성공할 때까지 애플리케이션이 서비스에 연결할 수 없었습니다.
그러므로 나는 애플리케이션을 사용할 수 있도록 너무 오래 기다리지 않도록 짧은 간격을 가져야 합니다.
언급URL : https://stackoverflow.com/questions/48007020/debugging-a-docker-compose-mariadb-healthcheck
'programing' 카테고리의 다른 글
자바스크립트 문자열에서 순방향 슬래시를 글로벌하게 대체하는 방법은? (0) | 2023.10.30 |
---|---|
0과 1사이의 신속한 무작위 유동 (0) | 2023.10.30 |
필수 범주의 제품이 카트에 있는 경우에만 체크아웃 허용 (0) | 2023.10.30 |
*ngIf에 대해 Angular 8 HTML 템플릿에서 Enum 사용 (0) | 2023.10.30 |
HTML 캔버스에서 텍스트의 높이를 어떻게 찾을 수 있습니까? (0) | 2023.10.30 |