docker執行exec報錯的解決方法:1、把腳本中的第一行用「/bin/bash」取代;2、執行「docker exec -d service_name /bin/bash -c '/opt /start.sh'」。
本文操作環境:centos7系統、Docker 20.10.11版本、Dell G3電腦。
docker exec 執行腳本失敗解決方法
#背景介紹
docker容器裡有一個腳本,需要在使用的時候在後台運行,但是透過docker exec 呼叫這個腳本卻一直得不到想要的結果,於是開始了探究之路!
原始腳本
docker exec -it service_name /bin/bash -c '/opt/start.sh'
這個start.sh的作用就是在背景啟動兩個服務
#!/bash nohup start1.sh > start1.log 2>&1 & sleep 5 nohup start2.sh 2>&1 & echo 'server started'
問題定位
1. 腳本書寫不規範
從上述的指令可以看到docker 啟動的時候用的式/bin/bash 而腳本中指定的確實
/bash.我們都知道腳本第一行的內容指定了shell腳本解釋器的路徑,而這個指定路徑只能放在檔案的第一行。因此需要把腳本中的第一行用
-it
這個參數, -t讓docker指派一個偽終端並綁定到容器的標準輸入上 這樣執行完後台腳本只能雲行第一個start.sh, 第二個並不能起作用,因為執行完了終端也退出了,###看到help 中, 有一個-d, 後台雲行腳本, 這條剛好符合我們的要求######修改過程###docker exec -d service_name /bin/bash -c '/opt/start.sh'
#!/bin/bash nohup start1.sh > start1.log 2>&1 & sleep 5 nohup start2.sh 2>&1 & echo 'server started'### 推薦學習:《###docker教學###》#########
以上是如何解決docker 執行exec報錯問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!