- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 docker-compose
构建一个 Express/React/Mongo 应用程序。我目前可以在 express 应用程序中使用重试逻辑来解决所有问题。但是,我更愿意使用 Docker 的 healthcheck以防止容器最初旋转时出现错误字符串。但是,当我在 docker-compose.yml
中添加 healthcheck
时,它会在间隔/重试时间限制内挂起并退出:
ERROR: for collector Container "70e7aae49c64" is unhealthy.
ERROR: for server Container "70e7aae49c64" is unhealthy.
ERROR: Encountered errors while bringing up the project.
我的健康检查似乎从未返回健康状态,我不完全确定原因。我的整个 docker-compose.yml
:
version: "2.1"
services:
mongo:
image: mongo
volumes:
- ./data/mongodb/db:/data/db
ports:
- "${DB_PORT}:${DB_PORT}"
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongo mongo:27017/test --quiet 1
interval: 10s
timeout: 10s
retries: 5
collector:
build: ./collector/
environment:
- DB_HOST=${DB_HOST}
- DB_PORT=${DB_PORT}
- DB_NAME=${DB_NAME}
volumes:
- ./collector/:/app
depends_on:
mongo:
condition: service_healthy
server:
build: .
environment:
- SERVER_PORT=$SERVER_PORT
volumes:
- ./server/:/app
ports:
- "${SERVER_PORT}:${SERVER_PORT}"
depends_on:
mongo:
condition: service_healthy
对于测试
,我也尝试过:
["CMD", "nc", "-z", "localhost", "27017"]
和:
["CMD", "bash", "/mongo-healthcheck"]
我也尝试完全放弃 healthcheck
,遵循 this guy 的建议.一切正常,但在成功连接之前我在输出中遇到了可怕的错误:
collector_1 | MongoDB connection error: MongoNetworkError: failed to connect to server [mongo:27017] on first connect [MongoNetworkError: connect
ECONNREFUSED 172.21.0.2:27017]
collector_1 | MongoDB connection with retry
collector_1 | MongoDB connection error: MongoNetworkError: failed to connect to server [mongo:27017] on first connect
最终目标是在运行 docker-compose up --build
时获得干净的启动输出。我还研究了 this question 中的一些解决方案。 ,但我在 wait-for-it
方面也不太走运。在启动其他容器并实现干净启动之前等待 Mongo 启动并运行的正确方法是什么?
最佳答案
首先,我建议将 docker-compose.yaml 文件版本更新到至少 3.4 (version: "3.5"
),然后请添加 start_period
您的 mongo healthcheck
Note: start_period is only supported for v3.4 and higher of the compose file format.
start period provides initialization time for containers that need time to bootstrap. Probe failure during that period will not be counted towards the maximum number of retries. However, if a health check succeeds during the start period, the container is considered started and all consecutive failures will be counted towards the maximum number of retries.
所以它看起来像这样:
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongo mongo:27017/test --quiet
interval: 10s
timeout: 10s
retries: 5
start_period: 40s
关于mongodb - 为什么我的mongo容器的docker-compose healthcheck总是失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54384042/
正如标题所示,我想为单个区域中的所有服务创建“组合”运行状况检查。我通过 CloudFormation 成功创建了基于 Documentation example 的不同运行状况检查: RegionH
我是 Consul/Registrator 和 Docker 的新手。我对在 Docker 环境中使用 Consul healthcheck 感到困惑。它在以下链接的 Docker + Interva
我尝试向我的撰写文件添加运行状况检查,但每当我运行该撰写文件时,都会收到以下错误。 ERROR: The Compose file './docker-compose.yml' is invalid
我有许多单元测试利用了我编写的@composite 策略。该策略非常慢(它会生成复杂的对象)并且有时其中一项测试无法通过 too_slow 健康检查。发生这种情况时,我深深地叹了口气,然后补充说 @s
我正在使用sath89/oracle-12c针对Oracle数据库进行自动化测试。 这工作正常,唯一的问题是此容器需要几分钟的时间才能启动(大约10-15取决于硬件)。 我试图对此容器进行健康检查。
我如何等待文件在 docker 中创建?我正在尝试下面的代码,但它不起作用。如果我与 docker shell 分开执行 bash -c [ -f/tmp/asdasdasd ],它会给我正确的结果。
我想创建一个健康检查器,它将检查 java 进程的健康状况。我的进程做了很多事情并且是多线程的。可能会引发各种异常,例如 Service/SQL/IO 等。我的计划是调用 HealthChecker
我正在尝试找到一种方法来禁用任何与健康检查相关的 ILogger 日志记录。我知道 LogLevel 过滤,但这在这里不起作用。 例如,我有一个运行状况检查,它向 RabbitMQ 指标 API 发出
我有点陷入这个奇怪的错误。我正在使用 CloudFormation 脚本部署 ECS 任务 (Fargate),它可以正常工作并成功部署该任务。但是当设置了 HealthCheck 属性时 Cloud
docker ps --quiet | xargs docker inspect --format '{{ .Id }}: Health={{ .State.Health.Status }}' c1a
这是我的docker-compose.yml: version: "3" services: mongodb: image: mongo:4.1 volumes: -
我正在尝试创建一个包含两个服务和每个服务中的 HealthCheck 的服务器,因此我可以独立检查它们并使用反射来了解每个服务中公开的方法。我已将一项服务硬编码为 NOT_SERVING 以对其进行测
我正在使用 .NET Core 3.1 并尝试设置运行状况检查,但遇到了一个奇怪的问题,需要一些帮助。 当我转到基本健康检查 URL (https://localhost:5001/hc) 时,我得到
我正在尝试为 sql-server 容器创建一个简单的健康检查,如下所示: version: "3.8" volumes: sql-server: services: sql-se
我正在关注 http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html使用 Spring Cloud 构建分布式系统。
我正在使用 docker compose 来运行几个相互依赖的服务。这是 docker-compose 的一部分: backend: build: . command: bash
我在我的 Dockerfile 中添加了健康检查: HEALTHCHECK --interval=1m --timeout=5s --retries=2 --start-period=10s \
我使用的是 Docker 版本 17.09.0-ce,我看到容器被标记为不健康。是否有一个选项可以让容器重新启动,而不是让容器保持不健康状态? 最佳答案 不健康容器的重新启动功能在原始 PR (htt
我有一个使用Health Check的Nginx docker镜像,如下所示:。出于安全原因,我也想删除外壳,但在那之后Health Check停止工作。我尝试完全删除Busybox(alpine-b
我有一个使用Health Check的Nginx docker镜像,如下所示:。出于安全原因,我也想删除外壳,但在那之后Health Check停止工作。我尝试完全删除Busybox(alpine-b
我是一名优秀的程序员,十分优秀!