跳到主要內容

發表文章

目前顯示的是有「troubleshooting」標籤的文章

[解決方法] mac 作業系統上無法使用 docker

  錯誤訊息 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 原因 因為 docker 的設計是走 client-server 的架構,  如果少裝了 server 的部分就會出現以上的錯誤訊息 解決方法 因為 docker daemon 需要使用 linux kernel 上的某些功能, 所以若想要在 mac 的 OS X 上使用 docker 必須額外起一台 linux VM 給 docker daemon 用  Step 1. 安裝 virtual box $ brew install virtualbox --cask   Step 2. 安裝 docker machine $ brew install docker-machine --cask   Step 3. 設定 使用 docker-machine 建立 VM 跑容器 $docker-machine create --driver virtualbox default $docker-machine restart   輸出環境變數 $docker-machine env default 如果執行以上的指令出現錯誤訊息 Error checking TLS connection: ...  可以執行以下指令重新產生憑證 $docker-machine regenerate-certs 最後套用環境變數, 讓 docker 知道要怎麼去跟這台 VM 溝通  $eval $(docker-machine env default)   測試 若做完以上的步驟沒噴錯誤訊息的話, 可以跑個 hello-world 看看 docker daemon 有沒有起來 $docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha...

如何在 Google App Engine 上除錯, 使用 Cloud Trace, Log Viewer

前言 Google App Engine (GAE) 提供了非常方便的環境讓開發者可以輕鬆地部署服務, 除此之外還有許多有用的功能族繁不及備載... 但若如果部署在 GAE 上的服務發生異常時, 我們該如何去追蹤問題呢? 以下簡單介紹一下幾個 GCP 上好用的服務幫助我們可以快速的縮小問題的範圍 Cloud Trace Cloud Logging Cloud Trace 這個服務可以讓我們快速的找到效能上的瓶頸是來源自哪隻 API 可以看出問題可能出在 /v1/interest/ads_pref 這隻API 上, 並且發生時間可能在  17:40 分左右 Cloud Logging 知道效能的瓶頸是源自於某隻 API 之後, 接下來可以用 Log Viewer 來看程式是否有拋出任何異常的訊息 在 Query Builder 下查詢語法來找出可能的線索 resource.type="gae_app" resource.labels.module_id="My-Service" textPayload:"exec bulk" timestamp >= "2020-05-15T17:40:00+08:00" AND timestamp <= "2020-05-15T17:43:00+08:00" 這個語法會找出 My-Service 這隻服務在 2020-05-15 這天17:40~17:43 產生含有 exec bulk 這段訊息的 log  以下是其他查詢可以用的運算子 =           # equal !=          # not equal > < >= <=   # numeric ordering :           # "has" matches any substring in the log entry field =~    ...

錯誤訊息 does not have storage.objects.get access to the Google Cloud Storage object

當我們想要建立 Cloud Run 的容器映像時, 可以使用 gcloud builds submit gcloud builds submit --tag gcr.io/andy-prj/my-service --project $PROJECT 若執行的過程中若出現以下的錯誤訊息時 Creating temporary tarball archive of 124 file(s) totalling 570.2 KiB before compression. Uploading tarball of [.] to [gs://andy-prj_cloudbuild/source/3422.582116-0fd81c021c243d892201dfd08ce1550.tgz] Created [https://cloudbuild.googleapis.com/v1/projects/andy-prj/builds/46712e03-3a15-403f-8be1-b1f1a238d02e]. Logs are available at [https://console.cloud.google.com/cloud-build/builds/ 46712e03-3a15-403f-8be1-b1f1a238d02e ?project=182871]. ERROR: (gcloud.builds.submit) HTTPError 403: <?xml version='1.0' encoding='UTF-8'?><Error><Code> AccessDenied </Code><Message> Access denied .</Message><Details>deploy-cloud@andy-prj.iam.gserviceaccount.com does not have storage.objects.get access to the Google Cloud Storage object .</Details></Error> 表示需要我們缺少存取 GCS 裡物件的權限 要解決這個問題...

錯誤訊息 Permission iam.serviceaccounts.actAs denied

當我們想要在 Cloud Run 部署新的服務的時候, 可以使用 gcloud run deploy  gcloud run deploy bi-cronjob \ --image gcr.io/$PROJECT/bi-cronjob \ --platform managed \ --no-allow-unauthenticated \ --region us-central1 \ --project $PROJECT \ --set-env-vars SERVICE_ENV=$RUNMODE \ --memory 1G 若部署的過程中出現以下的錯誤訊息時 Deploying container to Cloud Run service [my-service] in project [andy-prj] region [us-central1] X Deploying...   . Creating Revision...   . Routing traffic... Deployment failed ERROR: (gcloud.run.deploy) PERMISSION_DENIED: Permission   'iam.serviceaccounts.actAs' denied on service account  compute@developer.gserviceaccount.com (or it may not exist). 表示需要 Service Account User 的權限才能完成部署的動作 要解決這個問題, 可以到 IAM 的頁面下加入此權限 或是使用 gcloud 的指令來提昇權限 gcloud projects add-iam-policy-binding <PROJECT_ID> \ --member=serviceAccount:<SERVICE_ACCOUNT_ID>@<PROJECT_ID>.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountUser

Git取消合并 Undo a merge by pull request

前言 實務上在多人開發的情況下, 很常在上 Code 的時候被 Git 要求先做 PULL 但若是 PULL 下來的內容有問題,  特別是當同仁交付了一段會造成系統崩潰的內容至版本庫 (Repository) 時, PULL 下來的 Commit 就會使正在開發的功能受到影響, 若無法在短時間內修正, 嚴重的話甚至會影響到整個軟體專案的開發, 造成其他新功能都無法進行部屬 使用 Revert git pull 做的事情就是 Fetch + merge, 所以事實上可以使用 git revert 把剛剛的 Merge Commit 打掉 找出要打掉的 Merge Commit Id 執行 Revert 指令 $ git revert -m 1 結果如下 使用 Reset $ git reset --hard <MERGE 之前的 COMMIT_ID> 不建議用這個方法, 因為執行完上面的指令之後, 雖然 HEAD 會往前移動, 工作目錄會被還原到合併之前的 Commit, 但是在重新上 Code 時 Git 還是會要求做 PULL, 因為遠端分支的 HEAD 還是指在比較新的 Commit 上(有問題的  Commit) 除非強行覆蓋遠端版本庫中的內容, 如下 $ git push --force 但實務上並不是每個開發團隊都接受使用--force 的指令作強制覆蓋, 所以要取消 Merge Commit, 建議還是使用 Revert 指令

[解決方法] Cloud Scheduler Permission Denied

前言 Cloud Scheduler 有個進階的功能, 可以設定當排程被觸發的時候, 必須先取得指定的 IAM 身份, 才能去打指定的 Cloud Run 或是 Cloud Function 上的服務 整體的流程大致如下圖 Cloud Scheduler 發出 POST 請求取得 Token Cloud IAM 回傳 Token Cloud Scheduler 帶著 Token 打去打 Cloud Run 上的服務 最後 Cloud Run 根據 Token 是否擁有 Cloud Run Invoker 的權限來決定是否要執行這個請求 %3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%222%22%20style%3D%22ellipse%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3Baspect%3Dfixed%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22206%22%20y%3D%22197.5%22%20width%3D%2219%22%20height%3D%2219%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E 若部署完後在 Log 頁面出現 PERMISSION_DENIED 的話該如何處理??? {   "jobName": "projects/cloud-833005/locations/us-central1/jobs/sync_usr",   "targetType": "HTTP",   "url": "https://ukrjq-uc.a.run.app/api/job/load",   ...

無法執行PowerShell腳本

前言 如果在執行PowerShell的時候遇到以下的錯誤訊息的話  ps1 is not digitally signed. You cannot run this script on the current system. 不妨試試以下的指令, 告訴系統暫時先放過這個腳本 powershell.exe -executionpolicy bypass -file .\Script.ps1

[ 解決方法] LINQ to Entities does not recognize the method System.String Format

前言 相信.NET的開發者對Entity Framework(簡稱EF)絕對不陌生, 這是基於.NET的ORM框架, 除了可以讓開發者用存取物件的方式與資料庫溝通之外, 還可以搭配LINQ to Entity的技術, 更輕易地撰寫查詢邏輯, EF底層會自動將這些邏輯轉換為對應的SQL語法,然後執行在SQL Server上 雖然LINQ to Entity很方便, 但在使用上也必須小心, 不然有可能在編譯的時候都OK, 但Runtime時卻跳出以下的錯誤訊息 錯誤訊息 LINQ to Entities does not recognize the method System.String Format 錯誤的使用方式 這個問題出在於Select 的時侯呼叫了 string . Format   在這個情況下使用LINQ to Entities時, C#會告訴SQL Server去執行 string . Format , 但由於SQL Server上沒有相對應的指令, 所以才會出現這個錯誤訊息 解決方法 可以將Query分成兩段, 前半段最後呼叫 .AsEnumerable() 將資料讀到記憶體中, 後半段Query就能以LINQ to Objects的方式來操作資料, string . Format 也可以正常的被呼叫

Cannot restart container no space left on device

Error Message Error response from daemon: Cannot restart container mongo: mkdir /var/lib/docker/overlay2/605126f44fb2514d9e5ee60d75b2d69dea402ed8feec425bbadd50859e89d5b9/merged: no space left on device 通常在docker用了一段時間之後, 會發現他佔用掉不少的磁碟空間,  這時候若不去清理docker產生出來的垃圾的話, 很容易在操作docker指令時跑出錯誤訊息no space left on device 首先, 查詢可回收的空間 docker system df 這個指令可以看到目前docker佔用了多少磁碟空間 admin@ubuntu:~$ docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 99 9 42.62GB 34.18GB (80%) Containers 9 7 327.8MB 3.018kB (0%) Local Volumes 20 1 995.6MB 995.6MB (100%) Build Cache 0 0 0B 0B   RELAIMABLE   是總共可以回收的空間, 也就是垃圾占用的空間, 而這些垃圾通常是指一些沒有被容器使用的image(包含dangling image,即 <none> image)或是volume ...

[Azure] You cannot perform any write actions on this subscription until it is re-enabled

前言 會有這情況發生表示你的subscription被停用了,  而被停用的原因不外乎是這個subscription底下的點數被用完了, 而Azure好心的幫我們把服務給停止 如何re-enable被停用的subscription 最簡單且快速的解法是, 移除消費限制 必須綁一張信用卡去付多出來的費用 Step 1. 到Cost Management + Billing的頁面 選擇被停用的的Subscription 點選Manage之後會進入Subscription的管理頁面 上圖可以看出我訂閱的Visual Studio Professional有1600的點數可以用, 但我超額了125元, 所以需要在額外付費保持服務可以正常運作(上圖我是已經暫時移除了消費限制) Step 2. 點選變更消費限制的選項 選擇移除消費限制 移除消費限制有兩種方式 暫時移除 永久移除 暫時移除只有在目前訂閱的付費週期內有效, 所以在這周期內只要是超過就是多付錢但是服務不會被停止 若下個月很不幸地還是超過了, 服務還是一樣會被停止 Step 3. 重新登錄 這個動作做完之後, 回到剛剛的Cost Management + Billing的頁面, Status應該已經從disabled變為 active 如果狀態沒變, 那就先登出在重新登錄一次 我的經驗是差不多半個小時到一個小時內服務可以全恢復

[解決方法] Gitlab runner 執行 docker build 時報錯, permission denied

前言 Gitlab 是個非常好用的CI/CD工具(平台), 我們將所有要做的事情(如編譯, 測試, 產生docker image)定義在Pipeline裡, 讓 Gitlab Runner 去執行, 進而實現自動化的建置與部屬 而如果自動化的過程中出現問題, 也可以去追蹤輸出的log來找到原因 錯誤訊息 當 Gitlab Runner 執行 docker build 的指令時, 若出現以下錯誤訊息 Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38/build? ... 表示執行指令的身分沒有足夠權限 由於Gitlab Runner 會以gitlab-runner的身分去執行指令 所以解決方很簡單, 只要把 gitlab-runner 加到docker的群組中就行了 Step 1. (Optional) 若沒有docker群組的話需要建一個 sudo groupadd docker Step 2. 加入 gitlab-runner sudo usermod -aG docker gitlab-runner 最後, 重啟 docker服務或者重開機

[解決方法] docker: permission denied

前言 當我們執行docker 指令時若出現以下錯誤訊息 docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/create: dial unix /var/run/docker.sock: connect: permission denied. See 'docker run --help'. 表示目前的使用者身分沒有權限去存取docker engine, 因為docker的服務基本上都是以root的身分在執行的, 所以在指令前加sudo就能成功執行指令 但每次實行docker指令(就連docker ps)都還要加sudo實在有點麻煩, 正確的解法是 我們可以把目前使用者加到docker群組裡面, 當docker service 起來時, 會以這個群組的成員來初始化相關服務 sudo groupadd docker sudo usermod -aG docker $USER 需要退出重新登錄後才會生效 Workaround 因為問題是出在權限不足, 如果以上方法都不管用的話, 可以手動修改權限來解決這個問題 sudo chmod 777 /var/run/docker.sock https://docs.docker.com/install/linux/linux-postinstall/

[解決方法] NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.

前言 當我們安裝完nvidia 的driver後, 理論上使用nvidia-smi 應該要看到GPU的使用狀況如下 但如果是看到以下這個錯誤訊息, 表示NVidia的driver沒有成功裝起來 NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running 網路上的解法很多  1. 確認是否有插入顯卡 $ lspci | grep 'VGA' 如果系統有找到卡的話, 會顯示顯卡資訊  2. 確認security boot是否為disable的狀態     > 開機時, 進入Bios 設定畫面(若是Acer的電腦, 按Del 或是F2 即可進入Bios)   >  改成disable 後, 重開機再試看看   >  如果以上都不行, 那就只能試試大絕招了: 更新系統內核(kernel)  3. 確認kernel版本是否大於4.10 $ uname -a 結果如下, 目前內核版本是 4.15 若版本小於4.10, 那就必須升級 方法一: 下載內核然後安裝 wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15.7/linux-headers-4.15.7-041507_4.15.7-041507.201802280530_all.deb wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15.7/linux-headers-4.15.7-041507-generic_4.15.7-041507.201802280530_amd64.deb wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15.7/linux-image-4.15.7-041507-gene...

Windows 無法遠端連線 This could be due to CredSSP encryption oracle remediation

當你嘗試遠端連線時, 若出現一下錯誤訊息時, 切記末慌末害怕, 將頁面拉到最底下可以看到一串指令, 打開Command Prompt 執行, 就能解決這個問題 This could be due to CredSSP encryption oracle remediation Step 1. 以系統管理員的權限打開Command Prompt Step 2. 敲入以下指令 reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /f /v AllowEncryptionOracle /t REG_DWORD /d 2

Vue.js 錯誤訊息 Component template should contain exactly one root element

在編輯完vue 組件之後, 出現以下的錯誤訊息 (Emitted value instead of an instance of Error)   Error compiling template:   <MyHeader></MyHeader>   <p>Hello</p>   - Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.  @ ./src/components/Intents/Intents.vue 11:0-370  @ ./src/router/index.js  @ ./src/main.js  @ multi (webpack)-dev-server/client?http://localhost:8080 webpack/hot/dev-server ./src/main.js 原因是出在我的template, 直接用了 <MyHeader> 和 <p> 這兩個元素 </ template > < MyHeader ></ MyHeader > < p > Intents </ p > </ template > 但實際上, 如果有兩個以上的元素, 我們必需用 <div> 把他們包起來 </ template > <div> < MyHeader ></ MyHeader > < p > Intents </ p > </div> </ template > 而當我們沒有照...

Failed to account linking with amazon

The redirect URI you provided has been whitelisted for your application. If you see above error message, it means you have to go to amazon develop console and edit your security profile for redirect URL. Step 1. Copy redirect Redirect URLs on Alexa skill configuration page Step 2. Go to the web setting of your security profile and add these Redirect URLs you just copied to "Allowed Return URLs"