2017-12-08 15 views
0

travis를 사용하여 배포 할 때 ECS를 사용하려고합니다. 한순간에 모든 것이 작동했지만 이제는 중단되었습니다.AWS ECS 작업이 계속 시작되고 중지됨

나는이 튜토리얼 https://testdriven.io/part-five-ec2-container-service/

에게 다음하고 중지하고 시작 계속이 작업이 있습니다.

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" 

왜 ECS 중지 한 많은 새로운 작업을 시작 :

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

STOPPED (Essential container in task exited) 

이 내가 로그에서 볼 수있는 메시지는 다음과 같습니다

이 내가 작업에서 볼 수있는 메시지는? 전에는 그런 일이 없었습니다.

이것은 내 트래커를 통해 호출하는 주 마이크로 서비스의 docker_deploy.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"] 

entrypoint.sh :

#!/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 

내 클러스터를 삭제하고 내 작업을 등록 해제하고 다시 시작하지만 시도는 ECS는 여전히 계속 중지

#!/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 

이 내 Dockerfile 내 사용자 microservice에서입니다 이제 새로운 작업을 시작합니다.

그것은 잘 작동 때 : 차이가 대신 내 Dockerfile에서 CMD ["./entrypoint.sh"], 나는이

RUN python manage.py recreate_db 
RUN python manage.py seed_db 
CMD gunicorn -b 0.0.0.0:5000 manage:app 

트래비스가 통과했다이었다.

답변

1

오류가 있습니다.

호스트에 충분한 공간이 없습니다. entrypoint.sh 파일이 거부되었습니다.

호스트를 확인

은 또한 (확인하고 볼륨을 확장하거나 더 많은 공간을 가진 새로운 인스턴스를 가져 셸 및 df -h) 충분한 디스크 공간을 가지고 있으며 entrypoint.sh에 대한 이미지를 구축 할 때 그것을 실행 chmod +x 있는지 확인하고 컨테이너가 실행중인 사용자가 읽을 수 있습니다.

먼저 컨테이너를 로컬에서 테스트하십시오. 두 번째 오류는 즉시 개발에 걸려 있어야합니다.

+0

너무 많은 작업을 시작하고 중지했기 때문에 충분한 공간이 없다고 생각합니다. –

+0

작업은 공간을 소비하지 않습니다. 이미지는 한 번만 이미지를 다운로드했을 것입니다. –

+0

하지만 작업 정의 개정의 자동화를 시도하기 전에 제대로 작동했습니다. –

0

너무 많은 작업을 실행 중이고 공간을 소비 한 경우 호스트에 쉘을 설치하고 다음을 수행해야합니다. 실행중인 ECS 에이전트 컨테이너를 제거합니다과 docker rm-f를 사용하지 마십시오

docker rm $(docker ps -aq) 
-1

마 고정 표시기의 추신 -a 흥분 모든 정지 용기에 결과

,이 또한 디스크 공간을 소모합니다.그 zoombie에게

고정 표시기는 rm $ 제거 명령 아래 사용 (고정 표시기 추신 -a를 | GREP이 종료 함 | AWK '{$ 1 인쇄}')

을 그리고 이러한 컨테이너보다 더 DiskStation의 크기를 취 오래된 이미지 나 사용하지 않는 이미지를 제거

도커 rmi -f 이미지 이름