為了安全起見,我不想使用 root,所以我按照 VSCode 的建議做了,這是我的 Dockerfile:
FROM ubuntu:focal
# non root user (https://code.visualstudio.com/remote/advancedcontainers/add-nonroot-user)
ARG USERNAME=dev
ARG USER_UID=1000
ARG USER_GID=$USER_UID
# Create the user
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
&& apt-get update \
&& apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME
USER $USERNAME
我通過 github 作業流上的當前目錄:
docker run -u dev -v $PWD:/home/dev/project project /bin/bash -c "./my_script.sh"
但my_script.sh無法創建有權限問題的目錄。我也嘗試過docker run -u $USER ...,但它沒有runner在容器內找到用戶。
一種選擇是使用 root: 運行docker run -u root ...,但有更好的方法嗎?我嘗試通過,docker run -u dev ...但我也得到了 Permission Denied。
uj5u.com熱心網友回復:
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ && chmod 0440 /etc/sudoers.d/$USERNAME ```
這兩行說明不以 root 身份運行容器的全部原因。這是對 root 的無密碼升級,使用戶實際上與擁有完全 root 訪問權限相同。
docker run -u dev -v $PWD:/home/dev/project project /bin/bash -c "./my_script.sh"但 my_script.sh 無法創建存在權限問題的目錄。
主機卷使用相同的 uid/gid 掛載(除非使用用戶命名空間)。所以需要容器內用戶的uid/gid與宿主目錄uid/gid權限相匹配。
我也試過 docker run -u $USER ... 但它沒有在容器內找到用戶運行器。
如果您指定用戶名,它會在容器的 /etc/passwd 中查找該用戶名。您可以改為指定 uid/gid,例如:
docker run -u "$(id -u):$(id -g)" ...
確保該目錄已經存在于主機中(對于$PWD.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/487075.html
