實現指令碼自動部署docker

delx發表於2023-10-10

前言:

  使用場景是 我這邊的一個單體專案需要多一個多副本的部署方式,一直輸入重複命令我實在是嫌煩了,使用寫了一個指令碼來一鍵更新部署上去。jar包都是我手動上傳的,沒有把包傳入公網庫裡。

 之所以記錄就是因為遇到了幾個沒有遇到過的問題記錄以下。

 示例:

#!/bin/bash
# 進入指定資料夾打包成image
cd /soft/xx/xx/
# 停止和刪除包含 "mobile" 在名稱中的容器
docker ps | grep "mobile" | awk '{print $1}' | xargs docker stop
docker rm m1
docker rm m2
docker rm m3
# 構建 Docker 映象並獲取其 ID
IMAGE_ID=$(docker build -t xxx:Tag . -q)
# 使用映象 ID 執行 Docker 容器
docker run -d -p 0001:8080 --name mobile2 -v /opt/xx/:/opt/xx/ $IMAGE_ID
docker run -d -p 0002:8080 --name mobile1 -v /opt/xx/:/opt/xx/ $IMAGE_ID
docker run -d -p 0003:8080 --name mobile3 -v /opt/xx/:/opt/xx/ $IMAGE_ID
 
省略每次輸入 chmod +x script 這個命令,可以將指令碼複製到一個在系統 PATH 中的目錄中,這樣就可以在任何地方執行它,而無需新增 ./ 字首或手動更改許可權。
可以將指令碼複製到 /usr/local/bin/ 目錄中:
 
sudo cp 指令碼檔名 /usr/local/bin/
 
然後就可以在任何地方都只需要輸入 指令碼名稱就可以執行。

錯誤一:-bash: /usr/local/bin/runpoject: Permission denied 沒有許可權的命令

這個錯誤是由於許可權問題引起的,它表示你沒有足夠的許可權來執行 /usr/local/bin/runpoject 指令碼。這是因為 /usr/local/bin 目錄通常需要超級使用者許可權才能寫入。

你可以嘗試以下步驟來解決這個問題:

使用嘗試使用以下命令:

 sudo chmod +x /usr/local/bin/script

錯誤二:-bash: /usr/local/bin/runpoject: /bin/bash^M: bad interpreter: No such file or directory 轉義符的原因
這個錯誤訊息表明你的指令碼檔案包含了 Windows 風格的換行符(\r\n),而不是 Linux 風格的換行符(\n)。這種問題可能會導致直譯器無法找到正確的路徑。

要解決這個問題,你可以使用文字編輯器將指令碼檔案轉換為 Linux 風格的換行符。

你可以使用 dos2unix 命令來進行轉換,如果系統沒有安裝這個命令,可以嘗試使用 sed 命令來進行轉換,如下所示:

sed -i 's/\r$//' /usr/local/bin/script

親測可以解決問題。

相關文章