Estou tentando encaixar meu aplicativo node.js. Quando o contêiner for criado, quero que ele execute um git clone
e, em seguida, inicie o servidor de nó. Portanto, coloquei essas operações em um script .sh. E execute o script como um único comando no 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"]
Meu docker-entrypoint.sh se parece com isto:
git clone git@<repo>.git
git add remote upstream git@<upstream_repo>.git
/usr/bin/node server.js
Depois de construir esta imagem e executar:
docker run --env NODE_ENV=development -p 8080:8080 -t -i <image>
Estou entendendo:
docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.
Eu despejo no contêiner e a permissão de docker-entrypoint.sh é:
-rw-r--r-- 1 root root 292 Aug 10 18:41 docker-entrypoint.sh
três questões:
Meu script bash tem sintaxe errada?
Como altero a permissão de um arquivo bash antes de adicioná-lo a uma imagem?
Qual é a melhor maneira de executar vários comandos git no entrypoint sem usar um script bash?
Obrigado.
.sh
extensão deixa uma impressão enganosa sobre quais intérpretes podem executá-la. Você pode considerar tirar isso - não é convencional que os comandos do UNIX tenham extensões (você não executa ls.elf
, por exemplo).
exec
uma concha assim? não precisaria do bash
prefixo.