尽管 CMD 应该等待,AWS ECS 仍不断产生新任务

尽管 CMD 应该等待,AWS ECS 仍不断产生新任务

就好像CMD没有起到任何作用一样。

在我的 ECS 任务定义中,我已定义如下图所示的命令

在此处输入图片描述

python 进程应该是一个“阻塞进程”——它应该等待 SQS 队列中的数据。

然而从云监控日志来看,该任务似乎是不断产生的 在此处输入图片描述

实际上就像执行这个

 docker run -t simplequeue python /docverter/app/src/main.py

容器启动然后立即终止。

我已经在 dockerfile 中定义了 ENTRYPOINT

FROM ubuntu:16.04

RUN apt-get update -y --fix-missing
RUN apt-get install -y git python python-pip cron ntp

ENV APP_HOME /docverter

RUN mkdir -p ${APP_HOME}
COPY . ${APP_HOME}

#
# Log configuration

RUN mkdir -p /root/.aws
RUN mkdir -p /var/awslogs/state
COPY ./credentials /root/.aws/credentials
COPY docker-entrypoint.sh /docker-entrypoint.sh

RUN apt-get install -y curl
RUN curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
RUN python awslogs-agent-setup.py --non-interactive -c ${APP_HOME}/aws-log.cfg --region ap-southeast-2

# Entry point
# To ensure some background services are started when the container is started
ENTRYPOINT /docker-entrypoint.sh

docker-entrypoint如下:

#!/bin/bash
set -eo pipefail

service awslogs start
service ntp start

我想知道如何让docker容器执行任务定义中的命令

编辑根据 Andrey 的回答,我修改了入口点脚本,但问题并未解决。我添加了一个额外的echo "$@"调试脚本,但打印结果为空白。

docker build -t broken .
docker run -it broken python    # export to have python started

可以从这里克隆测试代码:git clone -b broken-entry-point-and-cmd https://github.com/kongakong/aws-ecs

答案1

您需要在 ENTRYPOINT 脚本末尾添加以下内容

exec "$@"

因为您同时使用了 ENTRYPOINT 和 CMD,所以 CMD 值作为参数传递给 ENTRYPOINT。

所以你需要告诉你的 bash 脚本启动那个 python 命令。

http://stackoverflow.com/questions/32255814/what-purpose-does-using-exec-in-docker-entrypoint-scripts-serve?rq=1

https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/

相关内容