2015-12-12 8 views
7

Ich habe eine Anwendung node.js in einem Docker-Bild in einem öffentlichen Repository verpackt.AWS Beanstalk docker Bild automatische Aktualisierung funktioniert nicht

Ich habe dieses Bild erfolgreich in einer AWS Beanstalk Docker-Anwendung bereitgestellt. Das Problem ist, dass ich erwartet habe, dass die Beanstalk-Anwendung automatisch aktualisiert wird, wenn ich das Bild im öffentlichen Repository aktualisiere, wie es die folgende Konfiguration vorschlägt.

Dockerrun.aws.json:

{ 
    "AWSEBDockerrunVersion": "1", 
    "Image": { 
    "Name": "peveuve/dynamio-payment-service", 
    "Update": "true" 
    }, 
    "Ports": [ 
    { 
     "ContainerPort": "8000" 
    } 
    ], 
    "Logging": "/var/log/dynamio" 
} 

Die Dockerfile ist sehr einfach:

FROM node:4.2.1-onbuild 
# Environment variables 
ENV NODE_ENV test 
ENV PORT 8000 
# expose application port outside 
EXPOSE $PORT 

Die Dokumentation Amazon ist ziemlich klar, dass:

Optional die Update-Taste schließen . Der Standardwert ist "true" und weist Elastic Beanstalk an, das Repository zu überprüfen, alle Aktualisierungen zum Image zu ziehen und alle zwischengespeicherten Bilder zu überschreiben.

Aber ich muss die Beanstalk-Anwendung manuell aktualisieren, indem ich eine neue Version des Deskriptors Dockerrun.aws.json hochlade. Habe ich etwas verpasst? Soll es so funktionieren?

Antwort

3

Die Dokumentation sollte klarer sein. Was sie sagen, ist mit update = true:

EBS wird eine docker pull vor einer docker run tun, wenn die Anwendung zum ersten Mal gestartet wird. Der Docker-Hub wird nicht kontinuierlich abgefragt.

Im Gegensatz dazu wird die Ausgabe einer docker run, ohne zuerst eine docker pull zu machen, immer die lokal gespeicherte Version dieser Maschine verwenden, die nicht immer die neueste ist.

Um das zu erreichen, was Sie wollen, müssen Sie eine webhook on Docker Hub einrichten, die eine Anwendung aufruft, die Sie steuern, die Ihre ELB-Anwendung neu erstellt.

+0

ich glaube, Sie im Grunde recht. Ich bin mir nur nicht sicher, ob ein Neustart ausreicht, eine Neuerstellung ist notwendig. Das musste ich tun, und ein anderer Mann sagte dasselbe in seinem Blog. Steigern Sie Ihre Antwort, wenn Sie zustimmen, und ich werde es akzeptieren. – peveuve

+0

guten Fang! Ich aktualisierte die Antwort –

+2

Update: tatsächlich, nicht neu erstellen Sie Ihre App, es dauert sehr lange. Viel besser, den gleichen Dockerrun.aws.json hochzuladen und die Versionsnummer zu erhöhen. – peveuve

3

Sie können die aws Kommandozeilen-Tool verwenden, um das Update auslösen:

aws elasticbeanstalk update-environment --application-name [your_app_name] --environment-name [your_environment_name] --version-label [your_version_label] 

Sie geben die Version, die enthält die Dockerrun.aws.json Datei, auf diese Weise eine neue Version der Anwendung hinzugefügt werden, nicht. In diesem Fall fungiert die Dockerrun-Datei als "Quelle" für die Anwendung, aber aws wird nur angewiesen, das Docker-Image zu ziehen. Daher wäre es überflüssig, neue Versionen für die Anwendung in Elastic Beanstalk zu erstellen (es sei denn, Sie verwenden speziell gekennzeichnete Docker-Images) in der Dockerrun Datei)

Links:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_image.html http://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_UpdateEnvironment.htm

Verwandte Themen