Назад | Перейти на главную страницу

AWS ECS продолжает создавать новые задачи, хотя CMD должен ждать

Как будто CMD не действует.

В моем определении задачи ECS я определил команду, как показано на снимке экрана ниже.

Предполагается, что процесс python является «блокирующим процессом» - он предполагает ожидание данных в очереди SQS.

Однако из журнала облачных наблюдений кажется, что задача создается постоянно.

По сути, это похоже на выполнение этого

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

Контейнер запускается и сразу же завершается.

Я определил 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

И точка входа в докер выглядит следующим образом:

#!/bin/bash
set -eo pipefail

service awslogs start
service ntp start

Я хочу знать, как заставить контейнер докера выполнять команду в определении задачи.

РЕДАКТИРОВАТЬ Согласно ответу Андрея, я изменил сценарий точки входа, но это не решает проблему. Я добавил дополнительную 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

Вам необходимо добавить следующее в конец вашего сценария 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/