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

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.我們都知道腳本第一行的內容指定了shell腳本解釋器的路徑,而且這個指定路徑只能放在文件的第一行。因此需要把腳本中的第一行用/bin/bash替換了,使得它們用同一個解釋器

2.啟動參數有問題

docker exec 執行的過程中使用了-it這個參數,如何解決docker 執行exec報錯問題

  • -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教程

以上就是如何解決

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享