aTT*_*raX 6 docker dockerfile docker-compose
我尝试将新的健康检查集成到我的docker系统中,但我真的不知道如何以正确的方式做到这一点:/
问题是,我的数据库容器需要更多时间来启动和初始化数据库,然后启动我的主应用程序的容器.结果:主容器无法启动正确,导致数据库连接丢失.我编写了一个healthcheck.sh脚本来检查数据库容器的连接,因此主容器在连接可用后开始启动.但我不知道如何在Dockerfile和docker-compose.yml中正确集成它
healthcheck.sh就像:
#!bin/bash
COUNTER=0
while [[ $COUNTER = 0 ]]; do
mysql --host=HOST --user="user" --password="password" --database="databasename" --execute="SELECT 1";
if [[ $? == 1 ]]; then
sleep 1
echo "Let's sleep again"
else
COUNTER=1
echo "OK, lets go!"
fi
done
Run Code Online (Sandbox Code Playgroud)
mysql容器Dockerfile:
FROM repository/mysql-5.6:latest
MAINTAINER Me
... some copies, chmod and so on
VOLUME ["/..."]
EXPOSE 3306
CMD [".../run.sh"]
HEALTHCHECK --interval=1s --timeout=3s CMD ./healthcheck.sh
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml喜欢:
version: '2'
services:
db:
image: db image
restart: always
dns:
- 10.
ports:
- "${MYSQL_EXTERNAL_PORT}:${MYSQL_INTERNAL_PORT}"
environment:
TZ: Europe/Berlin
data:
image: data image
main application:
image: application image
restart: always
dns:
- 10.
ports:
- "${..._EXTERNAL_PORT}:${..._INTERNAL_PORT}"
environment:
TZ: Europe/Berlin
volumes:
- ${HOST_BACKUP_DIR}:/...
volumes_from:
- data
- db
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能将此健康检查集成到我的docker-compose.yml文件中?或者还有其他机会延迟主容器的容器启动吗?
Thx Markus
一般来说,您的应用程序应该能够处理不可用的资源,但在启动时也有一些情况,让一个容器等待另一个容器“完全可用”是非常方便的。Docker 本身不会为您处理这个问题,但有一些方法可以通过使用某些脚本延迟实际命令来处理资源使用容器中的启动。
有一个很好的 postgresql 启动检查示例,可以在任何需要等待数据库“完全启动”的容器中使用。请参阅 docker 文档中的示例代码:https ://docs.docker.com/compose/startup-order/
我相信这类似于Docker Compose 在启动 Y 之前等待容器 X
您的 db_image 需要支持 curl。
为此,请创建您自己的 db_image 为:
FROM base_image:latest
RUN apt-get update
RUN apt-get install -y curl
EXPOSE 3306
Run Code Online (Sandbox Code Playgroud)
那么你需要的只是一个 docker-compose.yml 看起来像这样:
version: '2'
services:
db:
image: db_image
restart: always
dns:
- 10.
ports:
- "${MYSQL_EXTERNAL_PORT}:${MYSQL_INTERNAL_PORT}"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:${MYSQL_INTERNAL_PORT}"]
interval: 30s
timeout: 10s
retries: 5
environment:
TZ: Europe/Berlin
main_application:
image: application_image
restart: always
depends_on:
db:
condition: service_healthy
links:
- db
dns:
- 10.
ports:
- "${..._EXTERNAL_PORT}:${..._INTERNAL_PORT}"
environment:
TZ: Europe/Berlin
volumes:
- ${HOST_BACKUP_DIR}:/...
volumes_from:
- data
- db
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11065 次 |
最近记录: |