修正 GHCR manifest unknown 拉取失敗
記錄部署容器時遇到 ghcr.io 映像拉取失敗,最後確認是映像名稱大小寫與 tag 不一致造成的錯誤。
背景
在伺服器上使用 docker compose 部署來自 GitHub Container Registry 的映像時,服務無法正常拉起,需要快速確認是權限、tag,還是 registry 名稱造成的問題。
問題
執行 docker compose up -d 後出現 manifest unknown,代表 registry 找不到指定的映像或 tag。
調查過程
- 先確認 ghcr.io 的 repository 名稱與 owner 大小寫是否一致。
- 檢查 GitHub Personal Access Token 是否具備 read:packages 權限。
- 使用 docker pull 手動驗證映像完整路徑與 tag 是否存在。
- 重新比對 CI 發布出的 tag 與部署檔案中的 tag 是否相同。
解決方案
確認映像名稱需與 GHCR 實際發布名稱一致,並改用存在的 tag 重新拉取後即可正常部署。
docker pull ghcr.io/konohaderek/bitfinex-strategy-bot:426aa46
docker compose up -d
經驗總結
- GHCR 的映像名稱與 owner 命名需要精準一致。
- 部署前可以先用 docker pull 驗證映像是否存在。
- 把部署用 tag 與 CI 輸出綁在一起,可以降低人工填錯機率。
參考資料
20210822
又過了10天沒更新了WWWWWW 真的很容易就忘記要更新日誌這件事情
不過還是來記錄一下近況吧!
最近換到了新公司,比之前公司更遠了,遠到的有點不太習慣,大概是因為上一份工作離家真的很近,走路只要30分鐘就可以到,騎車不到10分鐘 現在去公司騎車都要30分鐘了 不過因為是疫情期間,只好忍耐了。
這次的公司主要是用 golang 開發的,所以我也必須要學會golang,好在之前有稍微寫過,不算難上手
但是還是很不習慣有一堆東西還要另外安裝,基本上就是被 visual studio 養壞了
像是使用 grpc & graphql 各種的 command not found
然後就必須自己手動 go get
現在開始有點擔心自己的 C# 會不會因此被遺忘掉了,所以決定來寫幾個常用的 C# SDK 吧!
目前規劃的有 Line 、 Telegram 、 Slack 跟 Teams , Discore 還在考慮中
也想把之前寫的 Excel 工具 再用 .net6 重新改寫一遍,但是我也還沒想好要用哪一套 Excel library處理,希望有人可以給我意見吧
目前就這樣繼續加油吧!
20210812
這幾日試著用 golang 建立一個 CleanArchitecture 的實作。
希望能用短短的時間來複習前幾日學習 DDD 的成果
也因為後面工作會稍微的用到 golang 所以就來重拾很久沒寫的 golang 希望不要跟以前差太多
也為了這個目標新開了一個專案 GolangCleanArchitecture
希望這個小專案能夠有完成的一天(笑)
這邊來說說目前遇到的小困擾吧
package name的引用,在過去都是在同一個package name下進行開發 , 這次特別拆分了package name導致在引用的過程出現了很醜的程式碼,這部分要再來找找解決方案了interface的使用,在Repository的部份想用介面做隔離,降低相依性,但是沒辦法把struct拆出去,只能跟interface在同一層裡面,這樣就沒辦法把實作的地方轉到Infrastructure去,畢竟存取資料庫算是外部引用的層級,能夠搬出去使用DI的方式我覺得才是最好的,這個也是要在想辦法處理的!
以上就是目前覺得比較麻煩的困擾,而且目前也還沒做到 DomainEvent 的觸發,這部分也是要來好好思考怎麼處理跟同步狀態。
明天再繼續努力吧!加油
- 目前寫下來還是覺得
C#輕鬆許多,大概也是因為寫得久跟有完整的CQRS和DI處理 ,不像golang這邊有想法卻不知道怎麼實作
20210809
VSCode Dev Container 測試
今天在測試 .net core 使用 vscode debug 的時候
發現了在遠端部分多出了 DevVolumes !
但是我一開始也不知道這是什麼,就點了 Clone Repostry in Container Volume
後面就挑出 Clone a repository from GitHub in a Container Volume !
沒想到這個可以直接把在 GitHub 上的專案直接用 Docker 執行起來!!!
這也太方便了吧!
如果已經有 Dockerfile 或 docker-compose 還可以直接使用,就把環境用 Docker 執行!
這個真的是福音啊!
終於可以不用再自己本機裝一堆東西,只要設定好 devcontainer.json 專案就帶著走啦!
只要有 vscode 哪裡都是相同的開發環境!
還有測試開啟 golang 跟 .net core 專案,也直接有 go-cli 跟 dotnet-cli 方便阿!
預設還有 git-cli 可以用!! 不過好像用 vscode 內建的就夠用了!
再來研究研究如何將 Volume 輸出到外部,或許這樣可以用 fork 來控制 git 項目!