首頁  >  文章  >  運維  >  如何解決docker 執行exec報錯問題

如何解決docker 執行exec報錯問題

藏色散人
藏色散人原創
2022-01-12 14:12:378647瀏覽

docker執行exec報錯的解決方法:1、把腳本中的第一行用「/bin/bash」取代;2、執行「docker exec -d service_name /bin/bash -c '/opt /start.sh'」。

如何解決docker 執行exec報錯問題

本文操作環境: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如何解決docker 執行exec報錯問題.我們都知道腳本第一行的內容指定了shell腳本解釋器的路徑,而這個指定路徑只能放在檔案的第一行。因此需要把腳本中的第一行用

/bin/bash
    替換了,使得它們用同一個解釋器
  • ##2.啟動參數有問題
#docker exec 執行的過程中使用了

-it

這個參數,

-t讓docker指派一個偽終端並綁定到容器的標準輸入上

-i則讓容器的標準輸入保持開啟.

這樣執行完後台腳本只能雲行第一個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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn