Estoy tratando de dockerizar mi aplicación node.js. Cuando se construye el contenedor, quiero que se ejecute git clone
y luego inicie el servidor de nodo. Por lo tanto, pongo estas operaciones en un script .sh. Y ejecute el script como un solo comando en 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"]
Mi docker-entrypoint.sh se ve así:
git clone git@<repo>.git
git add remote upstream git@<upstream_repo>.git
/usr/bin/node server.js
Después de construir esta imagen y ejecutar:
docker run --env NODE_ENV=development -p 8080:8080 -t -i <image>
Me estoy poniendo:
docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.
Entro en el contenedor y el permiso de docker-entrypoint.sh es:
-rw-r--r-- 1 root root 292 Aug 10 18:41 docker-entrypoint.sh
tres preguntas:
¿Mi script bash tiene una sintaxis incorrecta?
¿Cómo cambio el permiso de un archivo bash antes de agregarlo a una imagen?
¿Cuál es la mejor manera de ejecutar múltiples comandos git en el punto de entrada sin usar un script bash?
Gracias.
.sh
extensión deja una impresión engañosa sobre qué intérpretes pueden ejecutarlo. Podría considerar eliminar eso; no es convencional que los comandos de UNIX tengan extensiones (no se ejecutan ls.elf
, por ejemplo).
exec
un caparazón de esa manera? ¿no necesitaría el bash
prefijo?