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 執行exec報錯問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!