ฉันกำลังพยายามเทียบท่าแอป node.js เมื่อคอนเทนเนอร์ถูกสร้างขึ้นฉันต้องการให้มันรันgit clone
และเริ่มเซิร์ฟเวอร์โหนด ดังนั้นฉันจึงใส่การดำเนินการเหล่านี้ในสคริปต์. sh และรันสคริปต์เป็นคำสั่งเดียวใน 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 ของฉันมีลักษณะดังนี้:
git clone git@<repo>.git
git add remote upstream git@<upstream_repo>.git
/usr/bin/node server.js
หลังจากสร้างภาพนี้แล้วเรียกใช้:
docker run --env NODE_ENV=development -p 8080:8080 -t -i <image>
ฉันได้รับ:
docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.
ฉันใส่ลงในคอนเทนเนอร์และได้รับอนุญาตจาก docker-entrypoint.sh คือ:
-rw-r--r-- 1 root root 292 Aug 10 18:41 docker-entrypoint.sh
สามคำถาม:
สคริปต์ทุบตีของฉันมีไวยากรณ์ที่ไม่ถูกต้องหรือไม่?
ฉันจะเปลี่ยนสิทธิ์ของไฟล์ bash ก่อนเพิ่มลงในรูปภาพได้อย่างไร
อะไรคือวิธีที่ดีที่สุดในการรันคำสั่ง git หลายคำสั่งในจุดเข้าโดยไม่ต้องใช้ bash script
ขอบคุณ
.sh
ส่วนขยายจะทำให้เกิดความเข้าใจผิดว่าล่ามใดสามารถดำเนินการได้ คุณอาจลองนำสิ่งนั้นออก - ไม่ใช่เรื่องธรรมดาสำหรับคำสั่ง UNIX ที่จะมีส่วนขยาย (เช่นคุณไม่ได้เรียกใช้ls.elf
)
exec
ใช้เปลือกหอยแบบนั้นได้หรือไม่? มันไม่จำเป็นต้องมีbash
คำนำหน้า