-
Notifications
You must be signed in to change notification settings - Fork 8
20191010_three ways to setup docker user and group
Shawn Wang edited this page Dec 3, 2019
·
1 revision
title: "在 Docker 內設定使用者及群組權限的三種方式" date: 2019-10-10 type: blog author: AppleBoy link: https://blog.wu-boy.com/2019/10/three-ways-to-setup-docker-user-and-group/ layout: post comments: true
如果平常本身有在玩 Docker 的開發者肯定知道透過 docker command 啟動的容器預設是使用 root
來當作預設使用者及群組,這邊會遇到一個問題,當 Host 環境你有 root 權限就沒有此問題,如果你沒有 root 權限,又有需求在 Docker 容器內掛上 Volume,會發現產生出來的檔案皆會是 root 權限,這時候在 Host 完全無法寫入。本篇教大家使用三種方式來設定容器使用者權限。
進入 Ubuntu 容器會透過底下指令:
docker run -ti ubuntu /bin/bash
這時候可以透過 -u
方式將使用者 uid 及群組 gid 傳入容器內。
mkdir tmp
docker run -ti -v $PWD/tmp:/test \
-u uid:gid ubuntu /bin/bash
如何找到目前使用者 uid 及 gid 呢,可以透過底下方式
id -u
id -g
上述指令可以改成:
docker run -ti -v $PWD/tmp:/test \
-u $(id -u):$(id -g) ubuntu /bin/bash
也可以直接在 dockerfile 內直接指定使用者:
# Dockerfile
USER 1000:1000
我個人不是很推薦這方式,除非是在 container 內獨立建立使用者,並且指定權限。
透過 docker-compose 可以一次啟動多個服務。用 user
可以指定使用者權限來寫入特定的 volume
services:
agent:
image: xxxxxxxx
restart: always
networks:
- proxy
logging:
options:
max-size: "100k"
max-file: "3"
volumes:
- ${STORAGE_PATH}:/data
user: ${CURRENT_UID}
接著可以透過 .env
來指定變數值
STORAGE_PATH=/home/deploy/xxxx
CURRENT_UID=1001:1001
會指定使用者權限通常都是有掛載 Host volume 進入容器內,但是您又沒有 root 權限,如果沒有這樣做,這樣產生出來的檔案都會是 root 權限,一般使用者無法寫入,只能讀取,這時就需要用到此方法。
-
用 Docker 整合測試 Flutter 框架 (0)
-
Docker 實用指令及 Best Practices Cheat Sheet 圖表 (2)
-
Docker 下載 Images 遇到 Network timed out (0)
-
Traefik 搭配 Docker 自動更新 Let’s Encrypt 憑證 (5)
-
10 分鐘內用 Traefik 架設 Drone 搭配 GitHub 服務 (0)
-
在 docker-in-docker 環境中使用 cache-from 提升編譯速度 (5)
-
Drone 支援單機版安裝 (內附影片) (0)
-
用 Docker Multi-Stage 編譯出 Go 語言最小 Image (2)
-
在 Travis 升級 Docker 和 docker-compose 版本 (1)
-
用 Drone 自動化上傳 Docker Image 到 GitHub Docker Registry (0)