2017-12-08 5 views
0

Ich versuche ECS für den Einsatz mit Travis zu verwenden. An einem Punkt hat alles funktioniert, aber jetzt hat es aufgehört.AWS ECS-Aufgaben starten und stoppen

Ich folge diesem Tutorial https://testdriven.io/part-five-ec2-container-service/

Es gibt zwei Aufgaben, die halten stoppen und starten.

Dies sind die Nachrichten, die ich in Aufgaben zu sehen:

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

STOPPED (Essential container in task exited) 

Dies sind die Nachrichten, die ich in den Protokollen finden Sie unter:

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" 

Warum ECS stoppt und so viele neue Aufgaben zu beginnen? Das war vorher nicht passiert.

Dies ist mein docker_deploy.sh von meinem Haupt-Microservice, den ich über travis anrufe.

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

Das ist mein Dockerfile von meinem Benutzer Micro:

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 

Ich habe versucht, meine Cluster löschen und meine Aufgaben Deregistrierung und neu zu starten, aber ECS noch kontinuierlich anhält und startet jetzt neue Aufgaben.

Wenn es funktioniert gut: der Unterschied war, dass anstelle die in meinem Dockerfile, ich hatte

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

travis vorbei ist.

Antwort

1

Die Fehler sind genau dort.

Sie haben nicht genug Platz auf Ihrem Host; und die Datei entrypoint.sh wird abgelehnt.

Stellen Sie sicher, Ihren Gastgeber hat genügend Speicherplatz (Shell in und df -h die Lautstärke zu überprüfen und erweitern oder einfach nur eine neue Instanz mit mehr Platz bringen) und für die entrypoint.sh sicherzustellen, dass, wenn Ihr Bild Aufbau ausführbar chmod +x ist und auch ist lesbar durch den Benutzer der Container läuft als.

Testen Sie zuerst Ihre Container lokal; der zweite Fehler sollte sofort in der Entwicklung gefangen sein.

+0

Ich denke, es gibt nicht genug Platz, weil es so viele Aufgaben gestartet und gestoppt hat. –

+0

Aufgaben verbrauchen keinen Speicherplatz; Bilder tun - und es hätte nur einmal das Bild heruntergeladen. –

+0

Aber es funktionierte gut, bevor ich versuchte, die Aktualisierung von Taskdefinitionsrevisionen zu automatisieren. –

0

Wenn zu viele Aufgaben ausgeführt werden und der Speicherplatz belegt ist, müssen Sie den Host aktivieren und folgende Schritte ausführen. Nicht -f auf den docker rm wie verwendet den Lauf ECS Mittelbehälter

docker rm $(docker ps -aq) 
-1

Do Docker ps -a

entfernen, die in all dem gestoppten Behälter führt, die angeregt werden, diese verbrauchen auch Speicherplatz.verwenden unter Befehl diejenigen zoombie

Docker rm $ zu entfernen (Docker ps -a | grep Exited | awk '{print $ 1}')

und entfernen auch ältere Bilder oder nicht verwendete Bilder diese nimmt mehr Diskstation Größe als Behälter

docker rmi -f image_name