簡體   English   中英

使用RUN命令在Docker中執行Shell腳本

[英]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 ...

哪一個

  • 執行一個shell
  • 這個shell執行一個命令並等待它完成
  • 此命令以守護程序模式啟動MongoDB
  • MongoDB分叉並立即退出

最簡單的修復方法可能是只使用

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM