gpt4 book ai didi

amazon-web-services - ECS + FARGATE 容器启动后执行命令

转载 作者:行者123 更新时间:2023-12-05 04:35:54 26 4
gpt4 key购买 nike

我正在将 Redis 实例部署到 ECS 容器,并使用 FARGATE 运行。这是我的容器定义示例:

[
{
"name": "redis",
"image": "redis",
"restart": "always",
"portMappings": [
{"containerPort": 6379,
"hostPort": 6379}
],
"healthcheck": {
"Command": ["/bin/sh", "redis-cli", "SMEMBERS", "clientSet","|", "grep", "39e24s4"],
"Interval": 30,
"Timeout": 10,
"Retries": 5
},
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "redis-log-group",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "redis"
}
}
}
]

我的健康检查寻找一个预先实例化的客户端。我想做的是在实例化 redis 图像后 立即运行以下命令,检查文档,'command' 和 'entrypoint' 字段没有用,因为它们运行提供命令而不是实例化 redis 图像。

是否有任何我可以使用的字段,或者我可以做的任何事情来以自动方式(不使用 ECS Exec)执行此类任务?

redis-cli SADD clientSet <client-id>
redis-cli SMEMBERS clientSet

最佳答案

您不想使用 ECS exec,也不能结合使用 AWS Systems Manager (SSM) 和 docker exec,因为 fargate 不允许 docker 执行

但是,您可以在 ECS 启动 docker 容器时利用 COMMAND 参数。在容器定义参数内,在 Environment 下,您可以指定要运行的 CMD 命令,而不是通过 Dockerfile 在图像中指定的命令。这将等同于:

docker run -p 6379:6379 redis /bin/bash -c "redis-server --daemonize yes && sleep 1 && redis-cli SADD clientSet client1 && redis-cli save && redis-cli shutdown && redis-server"

让我们一一看看我们在这里做了什么:

  1. redis-server --daemonize yes - 在后台启动 redis 服务器

  2. sleep 1 - 等待 1 秒;这是等待服务器完全启动

  3. redis-cli SADD clientSet client1 - 将数据添加到内存中的redis set

  4. redis-cli save - 将数据持久化到磁盘

  5. redis-cli shutdown - 停止之前启动的服务器

  6. redis-server - 正常启动服务器

我还建议在运行状况检查开始之前添加一个小的宽限期。这可以使用 healthcheck 对象内的 startPeriod 参数指定。因此,我们的新容器定义如下所示:

[
{
"name": "redis",
"image": "redis",
"restart": "always",
"portMappings": [
{
"containerPort": 6379,
"hostPort": 6379
}
],
"healthcheck": {
"command": ["/bin/sh", "redis-cli", "SMEMBERS", "clientSet","|", "grep", "39e24s4"],
"interval": 30,
"timeout": 10,
"retries": 5,
"startPeriod": 10
},
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "redis-log-group",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "redis"
}
},
"command": [
"/bin/bash -c \"redis-server --daemonize yes && sleep 1 && redis-cli SADD clientSet rhl && redis-cli save && redis-cli shutdown && redis-server\""
]
}
]

关于amazon-web-services - ECS + FARGATE 容器启动后执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70935595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com