[英]Executing a shell script within docker with RUN command
Docker的新手,所以請多多包涵。
我的Dockerfile包含一個ENTRYPOINT:
ENV MONGOD_START "mongod --fork --logpath /var/log/mongodb.log --logappend --smallfiles"
ENTRYPOINT ["/bin/sh", "-c", "$MONGOD_START"]
我有一個Shell腳本通過python腳本向數據庫添加一個條目,然后啟動服務器。
腳本startApp.sh
chmod +x /addAddress.py
python /addAddress.py $1
cd /myapp/webapp
grunt serve --force
現在,以下所有RUN命令都無法成功執行此腳本。
sudo docker run -it --privileged myApp -C /bin/bash && /myApp/webapp/startApp.sh loc
sudo docker run -it --privileged myApp /myApp/webapp/startApp.sh loc
容器的docker日志是
"about to fork child process, waiting until server is ready for connections. forked process: 7 child process started successfully, parent exiting "
另外,當我在docker中打開bash提示並運行它時,startApp.sh可以很好地執行。
我無法弄清楚我在做什么錯,請幫忙。
我猜(由於我既不是MongoDB也不是Docker專家,我可能錯了,因為我不是mongod --fork
和/bin/sh -c
才是罪魁禍首。
您實際上要執行的是:
/bin/sh -c mongod --fork ...
哪一個
最簡單的修復方法可能是只使用
CMD ["mongod"]
就像官方的MongoDB Docker一樣。
我建議您創建一個entrypoint.sh文件:
#!/bin/sh
# Initialize start DB command
# Pick from env variable MONGOD_START if it exists
# else use the default value provided in quotes
START_DB=${MONGOD_START:-"mongod --fork --logpath /var/log/mongodb.log --logappend --smallfiles"}
# This will start your DB in background
${START_DB} &
# Go to startApp directory and execute commands
`chmod +x /addAddress.py;python /addAddress.py $1; \
cd /myapp/webapp ;grunt serve --force`
然后通過刪除最后一行並將其替換為以下3行來修改Dockerfile:
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
然后使用
docker build -t NAME:TAG .
現在,您運行以下命令來驗證ENTRYPOINT是否為/entrypoint.sh
docker inspect NAME:TAG | less
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.