Sto provando a dockerizzare la mia app node.js. Quando il contenitore viene creato, desidero che esegua git clone
e quindi avvii il server del nodo. Pertanto inserisco queste operazioni in uno script .sh. Ed esegui lo script come un singolo comando in ENTRYPOINT:
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y build-essential libssl-dev gcc curl npm git
#install gcc 4.9
RUN apt-get install -y software-properties-common python-software-properties
RUN add-apt-repository -y ppa:ubuntu-toolchain-r/test
RUN apt-get update
RUN apt-get install -y libstdc++-4.9-dev
#install newst nodejs
RUN curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
RUN apt-get install -y nodejs
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ADD package.json /usr/src/app/
RUN npm install
ADD docker-entrypoint.sh /usr/src/app/
EXPOSE 8080
ENTRYPOINT ["/usr/src/app/docker-entrypoint.sh"]
Il mio docker-entrypoint.sh ha questo aspetto:
git clone git@<repo>.git
git add remote upstream git@<upstream_repo>.git
/usr/bin/node server.js
Dopo aver costruito questa immagine ed eseguire:
docker run --env NODE_ENV=development -p 8080:8080 -t -i <image>
Sto ottenendo:
docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.
Eseguo la shell nel container e il permesso di docker-entrypoint.sh è:
-rw-r--r-- 1 root root 292 Aug 10 18:41 docker-entrypoint.sh
tre domande:
Il mio script bash ha una sintassi sbagliata?
Come posso modificare l'autorizzazione di un file bash prima di aggiungerlo a un'immagine?
Qual è il modo migliore per eseguire più comandi git nel punto di ingresso senza utilizzare uno script bash?
Grazie.
.sh
un'estensione lascia un'impressione fuorviante su quali interpreti possono eseguirlo. Potresti considerare di toglierlo: non è convenzionale che i comandi UNIX abbiano estensioni (non esegui ls.elf
, ad esempio).
exec
un guscio in questo modo? non sarebbe necessario il bash
prefisso.