首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ECS + FARGATE容器启动后执行命令

在ECS + FARGATE容器启动后执行命令
EN

Stack Overflow用户
提问于 2022-02-01 04:32:58
回答 1查看 941关注 0票数 3

我正在将Redis实例部署到ECS容器中,并与FARGATE一起运行。下面是我的容器定义的示例:

代码语言:javascript
复制
[
    {
        "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映像被实例化后立即运行以下命令,签出文档、“命令”和“entrypoint”字段,因为它们运行提供的命令,而不是实例化redis映像。

有什么字段我可以使用,或者我可以用自动化的方式(不使用Exec)来执行这样的任务吗?

代码语言:javascript
复制
redis-cli SADD clientSet <client-id>
redis-cli SMEMBERS clientSet
EN

回答 1

Stack Overflow用户

发布于 2022-10-01 15:56:43

您不想使用ECS exec,也不能使用AWS (SSM)和docker exec的组合,因为fargate不允许docker exec

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

代码语言:javascript
复制
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服务器

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

  1. redis-cli SADD clientSet client1 -将数据添加到内存

中的redis设置

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

  1. redis-cli shutdown -停止以前启动的服务器

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

我也建议在健康检查开始之前增加一个小的宽限期。这可以使用startPeriod参数在healthcheck对象中指定。因此,我们的新容器定义如下:

代码语言:javascript
复制
[
  {
    "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\""
    ]
  }
]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70935595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档