Node.js uygulamamı dockerize etmeye çalışıyorum. Konteyner inşa edildiğinde a çalıştırmasını git clone
ve ardından düğüm sunucusunu başlatmasını istiyorum . Bu nedenle bu işlemleri bir .sh betiğine koyuyorum. Ve komut dosyasını ENTRYPOINT'te tek bir komut olarak çalıştırın:
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"]
Docker-entrypoint.sh dosyam şöyle görünüyor:
git clone git@<repo>.git
git add remote upstream git@<upstream_repo>.git
/usr/bin/node server.js
Bu görüntüyü oluşturduktan ve çalıştırın:
docker run --env NODE_ENV=development -p 8080:8080 -t -i <image>
Ben alıyorum:
docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.
Kapsayıcıya kabuk ekliyorum ve docker-entrypoint.sh'nin izni:
-rw-r--r-- 1 root root 292 Aug 10 18:41 docker-entrypoint.sh
üç soru:
Bash betiğim yanlış sözdizimine mi sahip?
Bir bash dosyasının iznini bir görüntüye eklemeden önce nasıl değiştiririm?
Bir bash betiği kullanmadan giriş noktasında birden çok git komutunu çalıştırmanın en iyi yolu nedir?
Teşekkürler.
.sh
uzantı , onu hangi yorumlayıcıların çalıştırabileceği konusunda yanıltıcı bir izlenim bırakır. Bunu çıkarmayı düşünebilirsiniz - UNIX komutlarının uzantılara sahip olması geleneksel değildir ( ls.elf
örneğin çalıştırmazsınız ).
exec
şekilde bir kabuk yapabilir miyiz ? bash
öneke ihtiyacı olmaz mıydı .