J'essaie d'ancrer mon application node.js. Lorsque le conteneur est construit, je veux qu'il exécute un git clone
, puis démarre le serveur de nœuds. Par conséquent, j'ai mis ces opérations dans un script .sh. Et exécutez le script en une seule commande dans 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"]
Mon docker-entrypoint.sh ressemble à ceci:
git clone git@<repo>.git
git add remote upstream git@<upstream_repo>.git
/usr/bin/node server.js
Après avoir construit cette image et exécutez:
docker run --env NODE_ENV=development -p 8080:8080 -t -i <image>
Je suis en train:
docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.
Je shell dans le conteneur et l'autorisation de docker-entrypoint.sh est:
-rw-r--r-- 1 root root 292 Aug 10 18:41 docker-entrypoint.sh
trois questions:
Mon script bash a-t-il une syntaxe incorrecte?
Comment modifier l'autorisation d'un fichier bash avant de l'ajouter à une image?
Quelle est la meilleure façon d'exécuter plusieurs commandes git dans entrypoint sans utiliser de script bash?
Merci.
.sh
extension laisse une impression trompeuse sur les interprètes qui peuvent l'exécuter. Vous pourriez envisager de supprimer cela - il n'est pas conventionnel pour les commandes UNIX d'avoir des extensions (vous ne les exécutez pas ls.elf
, par exemple).
exec
une coquille de cette façon? n'aurait-il pas besoin du bash
préfixe.