TLDR: Si può utilizzare ContainerDirectory senza un HostDirectory o potrebbe essere necessario aggiornare il 03build.sh di costruire con il --no-cache = true bandiera.
Dopo un miliardo di ore più tardi, ho finalmente risolto questo problema con il mio caso d'uso. Sto usando CodePommeline per eseguire CodeCommit, CodeBuild ed Elastic Beanstalk per creare una soluzione di integrazione/consegna continua continua in AWS con docker. Il problema che mi sono imbattuto in CodeBuild è stato la creazione e la pubblicazione di nuove immagini della finestra mobile in AWS ECR (registro contenitore EC2) e EBS stava correttamente tirando giù la nuova immagine, ma l'immagine della finestra mobile non veniva mai aggiornata sul server.
Dopo aver esaminato l'intero processo di come EBS costruisce l'immagine della finestra mobile (c'è un articolo davvero eccezionale here, part 1 e here part 2 che fornisce una panoramica), ho scoperto il problema.
Per aggiungere all'articolo, c'è un processo in 3 fasi in EBS sulle istanze EC2 che vengono avviate per la distribuzione di immagini di finestra mobile.
- pre
- enact
- postale
Questo processo a 3 stadi è una sequenza di file bash che vengono eseguiti che si trovano in /opt/elasticbeanstalk/hooks/appdeploy/
.
La pre-fase di contenere i seguenti script di shell:
- 00clean_dir.sh - Pulisce directory in cui verrà scaricato fonte, rimuove i contenitori docker e le immagini (ad esempio di pulizia)
- 01unzip.sh - Download fonte da S3 e decomprime si
- 02loopback-check.sh - verifica non si dispone di impostazione finestra mobile loopback impostato
- 03build.sh - Questo è dove la magia accade in cui EC2 sarà costruire la vostra immagine finestra mobile dal Dockerfile o Dockerrun. aws.json. Dopo molti test, mi sono reso conto che questo script di build stava creando la mia immagine aggiornata, ma ho modificato questo script per includere anche il flag --no-cache sulla finestra mobile.
La fase di messa in scena è dove il problema di memorizzazione nella cache era effettivamente in corso. La fase Enact è composto da:
- 00run.sh - questo è dove run finestra mobile viene eseguita contro l'immagine che è stato generato nella fase di pre sulla base di variabili d'ambiente e le impostazioni nel vostro Dockerrun.aws.json.Questo è ciò che stava causando il problema di memorizzazione nella cache per me.
- 01flip.sh - Converte da AWS-messa in scena al corrente-app e un sacco di altre cose
Quando avrei eseguire corsa finestra mobile dall'immagine che è stato generato in fase di Pre, 03build.sh, lo farei guarda le mie modifiche aggiornate Tuttavia, quando eseguivo lo script della shell 00run.sh, apparivano le vecchie modifiche. Dopo aver esaminato il comando di marcia finestra mobile, che stava eseguendo
`Docker command: docker run -d -v null:/usr/share/nginx/html/ -v /var/log/eb-docker/containers/eb-current-app:/var/log/nginx ca491178d076`
Il -v null:/usr/share/nginx/html/
è ciò che è stato rompendola e causando non aggiornare. Ciò era dovuto al fatto che il mio file Dockerrun.aws.json aveva
"Volumes": [
{
"ContainerDirectory": "/usr/share/nginx/html/"
}
],
senza una posizione host di riferimento. Di conseguenza, eventuali modifiche future apportate non sono state aggiornate.
Per la mia soluzione, ho appena rimosso l'array "Volumes"
poiché tutti i miei file sono contenuti nell'immagine della finestra mobile che carico in ECR. Nota: Potrebbe essere necessario aggiungere anche il --no-cache allo 03build.sh.
Sembra che il beanstalk non supporti i dati utente, almeno secondo [questo] (http://stackoverflow.com/questions/8412231/how-do-i-pass-userdata-to-a-beanstalk -instance-with-cloudformation) e [this] (https://forums.aws.amazon.com/thread.jspa?threadID=81687). –