我正在使用docker -compose来启动一个minio服务和一个minio/mc服务(createbuckets)来创建一个默认存储桶。对于minio故障检测,我使用了mc命令的退出代码,该代码将主机添加到配置中以进行故障检测。下面列出了docker-compose文件。
当mc add host命令在入口点命令字符串中失败时,我似乎无法让createbuckets服务返回 0 以外的任何值的退出代码。谁能发现为什么会发生此错误?我在 MacOS 环境中运行它。我发现预期的行为几乎适用于 Linux 操作系统环境。请参阅下面添加的评论。
对于信息,入口点检查将 minio 作为主机添加到 mc 命令客户端配置的命令是否成功。我已经指定了on-failure的重启策略,这样如果失败,我可以发出失败退出代码 1,从而重新启动createbuckets服务,直到它可以连接到 minio。
version: "3"
services:
minio:
image: minio/minio
ports:
- "9000:9000"
volumes:
- ./docker/minio-data:/export
- ./docker/minio-config:/root/.minio
environment:
- "MINIO_ACCESS_KEY=accesskey"
- "MINIO_SECRET_KEY=secretkey"
command: server /export
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000"]
interval: 30s
timeout: 10s
retries: 5
createbuckets:
image: minio/mc
depends_on:
- minio
restart: on-failure
entrypoint: >
/bin/sh -c "
mc config host add myminio http://minio:9000 accesskey secretkey;
success=$$?;
if [ $$success -ne 0 ]; then \
echo error encountered;
else \
/usr/bin/mc rm -r --force myminio/uploads;
/usr/bin/mc mb myminio/uploads;
/usr/bin/mc policy download myminio/uploads; \
fi
echo the variable value is $$success;
if [ $$success -ne 0 ]; then exit 1; else exit 0; fi
"
解决使用netcat对minio进行故障检测
基于https://stackoverflow.com/a/48215226/8325270和https://8thlight.com/blog/dariusz-pasciak/2016/10/17/docker-compose-wait-for-dependencies.html我放弃了使用命令的退出状态作为连接到 minio 的故障检测方法。这样做有利于netcat实用程序。下面列出了 docker compose 文件。此外,我删除了minio服务中的healthcheck部分,因为在docker -compose 文件规范的 v3 中删除了条件依赖项。
version: "3.4"
services:
minio:
image: minio/minio
ports:
- "9000:9000"
volumes:
- ./docker/minio-data:/export
- ./docker/minio-config:/root/.minio
environment:
- "MINIO_ACCESS_KEY=accesskey"
- "MINIO_SECRET_KEY=secretkey"
command: server /export
createbuckets:
image: minio/mc
links:
- minio
restart: on-failure
entrypoint: >
/bin/sh -c "
echo Waiting for minio service to start...;
while ! nc -z minio 9000;
do
sleep 1;
done;
echo Connected!;
mc config host add myminio http://minio:9000 accesskey secretkey;
/usr/bin/mc rm --recursive --force myminio/uploads;
/usr/bin/mc mb myminio/uploads;
/usr/bin/mc policy download myminio/uploads;
/usr/bin/mc policy upload myminio/uploads;
exit 0;
"