2015-12-12 17 views
7

Mam aplikację node.js umieszczoną w obrazie dokowanego hostowaną w publicznym repozytorium.AWS Beanstalk automatyczna aktualizacja obrazu docker nie działa

Mam wdrożone tego obrazu w aplikacji dokowania AWS Beanstalk pomyślnie. Problem polega na tym, że oczekiwałem, że aplikacja Beanstalk zostanie automatycznie zaktualizowana po aktualizacji obrazu w publicznym repozytorium, co sugeruje poniższa konfiguracja.

Dockerrun.aws.json:

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

Dockerfile jest bardzo prosta:

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

Dokumentacja Amazon jest całkiem jasne, że:

Opcjonalnie można dołączyć przycisk Aktualizuj . Wartością domyślną jest "true", a instruuje Elastic Beanstalk, aby sprawdzała repozytorium, pobierała wszelkie aktualizacje do obrazu i nadpisywała obrazy w pamięci podręcznej.

Muszę ręcznie zaktualizować aplikację Beanstalk, przesyłając nową wersję deskryptora Dockerrun.aws.json. Przegapiłem coś? Czy to ma działać w ten sposób?

Odpowiedz

3

Dokumentacja powinna być bardziej przejrzysta. To, co mówią, jest z aktualizacją = true:

EBS wykona docker pull, zanim wykona docker run, gdy aplikacja zostanie uruchomiona po raz pierwszy. Nie będzie on stale odpytywał stacji dokującej.

W przeciwieństwie do wydawania docker run bez uprzedniego zrobienia docker pull będzie zawsze używać lokalnie przechowywanej wersji tego komputera, co nie zawsze musi być najnowszym.

Aby osiągnąć to, co chcesz, musisz skonfigurować webhook on Docker Hub, która wywołuje kontrolowaną przez ciebie aplikację, która przebudowuje Twoją aplikację ELB.

+0

myślę, że są w zasadzie rację. Nie jestem pewien, czy wystarczy ponowne uruchomienie, konieczna jest przebudowa. To właśnie musiałem zrobić, a inny facet powiedział to samo na swoim blogu. Zwiększ swoją anwser, jeśli się zgodzisz, a ja to zaakceptuję. – peveuve

+0

dobry połów! zaktualizowałem odpowiedź: –

+2

Aktualizacja: w rzeczywistości, nie odbudowuj swojej aplikacji, zajmuje to bardzo dużo czasu. Znacznie lepiej załadować ten sam Dockerrun.aws.json i zwiększyć numer wersji. – peveuve

3

Można użyć AWS narzędzia wiersza polecenia do uruchomienia aktualizacji:

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

określić wersję zawierającą plik Dockerrun.aws.json, w ten sposób nowa wersja nie zostanie dodana do aplikacji. W tym przypadku plik Dockerrun działa jako "źródło" dla aplikacji, ale mówi tylko, aby aws pobierał obraz doka, więc byłoby zbyteczne tworzenie nowych wersji dla aplikacji w Elastic Beanstalk (chyba że używasz specjalnie oznaczonych obrazów doków w pliku Dockerrun)

Linki:

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

Powiązane problemy