就好像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 命令。
https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/