Tôi đang cố gắng hoàn thiện ứng dụng node.js của mình. Khi vùng chứa được tạo, tôi muốn nó chạy a git clone
và sau đó khởi động máy chủ nút. Do đó, tôi đặt các thao tác này trong một tập lệnh .sh. Và chạy tập lệnh dưới dạng một lệnh duy nhất trong 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 của tôi trông như thế này:
git clone git@<repo>.git
git add remote upstream git@<upstream_repo>.git
/usr/bin/node server.js
Sau khi xây dựng hình ảnh này và chạy:
docker run --env NODE_ENV=development -p 8080:8080 -t -i <image>
Tôi nhận được:
docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.
Tôi đưa vào vùng chứa và quyền của docker-entrypoint.sh là:
-rw-r--r-- 1 root root 292 Aug 10 18:41 docker-entrypoint.sh
ba câu hỏi:
Tập lệnh bash của tôi có sai cú pháp không?
Làm cách nào để thay đổi quyền của tệp bash trước khi thêm nó vào hình ảnh?
Cách tốt nhất để chạy nhiều lệnh git trong entrypoint mà không sử dụng tập lệnh bash là gì?
Cảm ơn.
.sh
phần mở rộng sẽ để lại ấn tượng sai lệch về việc trình thông dịch có thể thực thi nó. Bạn có thể cân nhắc loại bỏ điều đó - thông thường các lệnh UNIX có phần mở rộng ( ls.elf
ví dụ như bạn không chạy ).
exec
một vỏ theo cách đó? nó sẽ không cần bash
tiền tố.