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腳本解釋器的路徑,而且這個指定路徑只能放在文件的第一行。因此需要把腳本中的第一行用/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教程》
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦