2015-12-12 8 views
7

У меня есть приложение node.js, упакованное в изображение докеров, размещенное в публичном репозитории.AWS Beanstalk docker изображение автоматическое обновление не работает

Я успешно развернул это изображение в приложении док-станции AWS Beanstalk. Проблема в том, что я ожидал, что приложение Beanstalk будет автоматически обновляться при обновлении образа в общедоступном репозитории, как показано ниже.

Dockerrun.aws.json:

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

Dockerfile очень просто:

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

документация Amazon довольно ясно, что:

Необязательно включать клавишу Update , Значение по умолчанию - «true», а инструктирует Elastic Beanstalk, чтобы проверить репозиторий, вытащить все изображения и перезаписать любые кешированные изображения.

Но я должен обновить приложение Beanstalk вручную, загрузив новую версию дескриптора Dockerrun.aws.json. Я что-то пропустил? Должно ли это работать так?

ответ

3

Документация должна быть более понятной. То, что они говорят, это update = true:

EBS сделает docker pull, прежде чем он начнет docker run, когда приложение будет запущено. Он не будет постоянно опробовать докер-концентратор.

Напротив, выдача docker run без предварительного ввода docker pull всегда будет использовать локально сохраненную версию этой машины, которая может не всегда быть последней.

Чтобы получить то, что вы хотите, вам необходимо настроить webhook on Docker Hub, который вызывает приложение, которым вы управляете, которое перестраивает ваше приложение ELB.

+0

Я думаю, что вы в основном правильно. Я просто не уверен, что перезагрузки достаточно, необходима перестройка. Это то, что я должен был сделать, и другой парень сказал то же самое в своем блоге. Если вы согласитесь, поднимите свой андерс, и я его приму. – peveuve

+0

хороший catch! я обновил ответ –

+2

Обновление: на самом деле, не перестраивайте свое приложение, это занимает очень много времени. Гораздо лучше загрузить тот же Dockerrun.aws.json и увеличить номер версии. – peveuve

3

Вы можете использовать AWS инструмент командной строки для запуска обновления:

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

Вы указываете версию, содержащую Dockerrun.aws.json файл, таким образом новая версия не будет добавлен в приложение. В этом случае файл Dockerrun работает как «источник» для приложения, но он только сообщает aws, чтобы вытащить изображение докера, поэтому было бы излишним создавать новые версии для приложения в Elastic Beanstalk (если вы не используете специально отмеченные изображения докеров в файле Dockerrun)

Ссылки:

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