AWS ECS任务会一直启动和停止

时间:2017-12-08 15:47:05

标签: amazon-web-services docker amazon-ecs

我正在尝试使用ECS与travis进行部署。 有一次,一切正常,但现在已经停止了。

我正在关注本教程https://testdriven.io/part-five-ec2-container-service/

有两个任务一直停止和开始。

这些是我在任务中看到的消息:

TRemoteDataModule

这些是我在日志中看到的消息:

STOPPED (CannotStartContainerError: API error (500): oci ru)

STOPPED (Essential container in task exited)

为什么ECS会停止并启动这么多新任务?这种情况以前没有发生过。

这是我的主要微服务中的docker_deploy.sh,我是通过travis调用的。

FATAL: could not write to file "pg_wal/xlogtemp.28": No space left on device

container_linux.go:262: starting container process caused "exec: \"./entrypoint.sh\": permission denied"

这是我的用户微服务的Dockerfile:

#!/bin/sh


if [ -z "$TRAVIS_PULL_REQUEST" ] || [ "$TRAVIS_PULL_REQUEST" == "false" ];
then

    if [ "$TRAVIS_BRANCH" == "staging" ];
    then
        JQ="jq --raw-output --exit-status"

        configure_aws_cli() {
            aws --version
            aws configure set default.region us-east-1
            aws configure set default.output json
            echo "AWS Configured!"
        }

        make_task_def() {
            task_template=$(cat ecs_taskdefinition.json)
            task_def=$(printf "$task_template" $AWS_ACCOUNT_ID $AWS_ACCOUNT_ID)
            echo "$task_def"
        }

        register_definition() {
            if revision=$(aws ecs register-task-definition --cli-input-json "$task_def" --family $family | $JQ '.taskDefinition.taskDefinitionArn');
            then
                echo "Revision: $revision"
            else
                echo "Failed to register task definition"
                return 1
            fi
        }

        deploy_cluster() {

            family="testdriven-staging"
            cluster="ezasdf-staging"
            service="ezasdf-staging"

            make_task_def
            register_definition

            if [[ $(aws ecs update-service --cluster $cluster --service $service --task-definition $revision | $JQ '.service.taskDefinition') != $revision ]];
            then
                echo "Error updating service."
                return 1
            fi

        }

        configure_aws_cli
        deploy_cluster

    fi
fi

entrypoint.sh:

FROM python:3.6.2

# install environment dependencies
RUN apt-get update -yqq \
    && apt-get install -yqq --no-install-recommends \
        netcat \
    && apt-get -q clean

# set working directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# add requirements (to leverage Docker cache)
ADD ./requirements.txt /usr/src/app/requirements.txt

# install requirements
RUN pip install -r requirements.txt

# add entrypoint.sh
ADD ./entrypoint.sh /usr/src/app/entrypoint.sh
RUN chmod +x /usr/src/app/entrypoint.sh

# add app
ADD . /usr/src/app

# run server
CMD ["./entrypoint.sh"]

我尝试删除我的群集并取消注册我的任务并重新启动,但ECS仍然会不断停止并立即启动新任务。

当它工作正常时:区别在于我的Dockerfile中没有#!/bin/sh echo "Waiting for postgres..." while ! nc -z users-db 5432; do sleep 0.1 done echo "PostgreSQL started" python manage.py recreate_db python manage.py seed_db gunicorn -b 0.0.0.0:5000 manage:app ,而是

CMD ["./entrypoint.sh"]
特拉维斯正在过世。

3 个答案:

答案 0 :(得分:1)

错误就在那里。

您的主机上没有足够的空间;并且entrypoint.sh文件被拒绝。

确保您的主机有足够的磁盘空间(Shell和df -h以检查和扩展卷,或者只调出一个有更多空间的新实例),并entrypoint.sh确保构建映像时它是可执行文件chmod +x,也可由容器正在运行的用户读取。

首先在本地测试您的容器;第二个错误应该立即被发现。

答案 1 :(得分:0)

如果运行的任务太多而且他们占用了空间,那么您将需要进入主机并执行以下操作。不要在-f上使用docker rm因为这会删除正在运行的ECS代理容器

docker rm $(docker ps -aq)

答案 2 :(得分:0)

Docker ps -a

导致所有已停止的容器被激发,这些也会消耗磁盘空间。使用下面的命令删除那些zoombie

docker rm $(docker ps -a | grep退出| awk'{print $ 1}')

同时删除较旧的图像或未使用的图像,这些图像占用的磁盘容量大于容器

docker rmi -f image_name