Saya mencoba melakukan docker pada aplikasi node.js saya. Saat container dibuat, saya ingin menjalankan filegit clone dan kemudian memulai server node. Oleh karena itu saya menempatkan operasi ini dalam skrip .sh. Dan jalankan skrip sebagai satu perintah di 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"]
Docker-entrypoint.sh saya terlihat seperti ini:
git clone git@<repo>.git
git add remote upstream git@<upstream_repo>.git
/usr/bin/node server.js
Setelah membangun gambar ini dan jalankan:
docker run --env NODE_ENV=development -p 8080:8080 -t -i <image>
Saya mendapatkan:
docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.
Saya masuk ke dalam wadah dan izin dari docker-entrypoint.sh adalah:
-rw-r--r-- 1 root root 292 Aug 10 18:41 docker-entrypoint.sh
tiga pertanyaan:
Apakah skrip bash saya memiliki sintaks yang salah?
Bagaimana cara mengubah izin file bash sebelum menambahkannya ke dalam gambar?
Apa cara terbaik untuk menjalankan beberapa perintah git di entrypoint tanpa menggunakan skrip bash?
Terima kasih.
.shekstensi meninggalkan kesan yang menyesatkan tentang interpreter mana yang dapat menjalankannya. Anda mungkin mempertimbangkan untuk mengambil itu - tidak konvensional untuk perintah UNIX memiliki ekstensi (Anda tidak menjalankan ls.elf, misalnya).
execmembuat cangkang seperti itu? bukankah itu membutuhkan bashawalan.