USER 指定目前使用者

格式:USER <使用者名稱>

USER 指令和 WORKDIR 相似,都是改變環境狀態並影響以後的層。WORKDIR 是改變工作目錄,USER 則是改變之後層的執行 RUN, CMD 以及 ENTRYPOINT 這類指令的身份。

當然,和 WORKDIR 一樣,USER 只是說明你切換到指定使用者而已,這個使用者必須是事先建立好的,否則無法切換。

RUN groupadd -r redis && useradd -r -g redis redis
USER redis
RUN [ "redis-server" ]

如果以 root 執行的指令碼,在執行工作階段會議希望改變身份,比如希望以某個已經建立好的使用者來執行某個服務處理序,不要使用 su 或是 sudo,這些都需要比較麻煩的設定,而且在 TTY 缺失的環境下經常出錯。建議使用 gosu,可以從其項目網站看到進一步的資訊:https://github.com/tianon/gosu

# 建立 redis 使用者,並使用 gosu 換另一個使用者執行指令
RUN groupadd -r redis && useradd -r -g redis redis
# 下載 gosu
RUN wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.7/gosu-amd64" \
    && chmod +x /usr/local/bin/gosu \
    && gosu nobody true
# 設定 CMD,並以另外的使用者執行
CMD [ "exec", "gosu", "redis", "redis-server" ]

results matching ""

    No results matching ""