如果平常本身有在玩 Docker 的開發者肯定知道透過 docker command 啟動的容器預設是使用 root
來當作預設使用者及群組,這邊會遇到一個問題,當 Host 環境你有 root 權限就沒有此問題,如果你沒有 root 權限,又有需求在 Docker 容器內掛上 Volume,會發現產生出來的檔案皆會是 root 權限,這時候在 Host 完全無法寫入。本篇教大家使用三種方式來設定容器使用者權限。
使用 docker 指令時指定使用者
進入 Ubuntu 容器會透過底下指令:
|
|
這時候可以透過 -u
方式將使用者 uid 及群組 gid 傳入容器內。
如何找到目前使用者 uid 及 gid 呢,可以透過底下方式
上述指令可以改成:
使用 Dockerfile 指定使用者
也可以直接在 dockerfile 內直接指定使用者:
我個人不是很推薦這方式,除非是在 container 內獨立建立使用者,並且指定權限。
透過 docker-compose 指定權限
透過 docker-compose 可以一次啟動多個服務。用 user
可以指定使用者權限來寫入特定的 volume
接著可以透過 .env
來指定變數值
心得
會指定使用者權限通常都是有掛載 Host volume 進入容器內,但是您又沒有 root 權限,如果沒有這樣做,這樣產生出來的檔案都會是 root 權限,一般使用者無法寫入,只能讀取,這時就需要用到此方法。
See also
- Go 1.16 推出 Embedding Files
- 用 Docker 每天自動化備份 MySQL, Postgres 或 MongoDB 並上傳到 AWS S3
- 如何將前端網站打包成 Docker Image
- 使用 Docker BuildKit 加速編譯 Image
- 用 GitHub Actions 上傳 Docker Image 到 AWS ECR
- Docker 推出官方 GitHub Actions 套件
- Go Modules 處理 Private GIT Repository 流程
- 用五分鐘安裝好 Drone 搭配 GitHub 自動化環境
- 使用 Docker 五分鐘安裝好 Gitea (自架 Git Hosting 最佳選擇)
- [Go 教學] graceful shutdown 搭配 docker-compose 實現 rolling update