簡體   English   中英

Docker卷的權限問題

[英]Permissions issue with Docker volumes

我想開始使用Docker進行我的Rails開發,所以我試圖整理一個我可以用於所有應用程序的框架

但是,我遇到了Docker卷和權限的問題。

我想將應用程序的目錄綁定到容器中,以便將任何更改傳播到容器而無需重新構建它。

但是,如果我把它定義為在我的體積docker-compose.yml ,我不能chown了目錄。 我需要app用戶擁有該目錄及其所有內容,以便Passenger正常工作。

我讀到這是不可能chown卷。

你知道任何變通方法嗎?

您可以嘗試通過CMD運行chown 喜歡:

CMD chown -R app:app /home/app/webapp && /sbin/my_init

RUN語句僅在映像的構建時間內執行。 但是你還沒有安裝卷。

當卷已經安裝時, CMD代替在容器的運行時期間執行。 這樣會產生你想要的效果。

我使用hacky解決方案來管理我的開發環境中的這個問題。 僅在開發環境中使用

我用於開發環境的圖像包含一個如下所示的腳本:

#!/bin/sh

# In usr/local/bin/change-dev-id
# Change the "dev" user UID and GID

# Retrieve new ids to apply
NEWUID=$1
NEWGID=$1
if [ $# -eq 2 ]
then
    NEWGID=$2
elif [ $# -ne 1 ]
then
    echo "Usage: change-dev-id NEWUID [NEWGID]"
    echo "If NEWGID is not provided, its value will be the same as NEWUID"
    exit 1
fi

# Retrieve old ids
OLDUID=`id -u dev`
OLDGID=`id -g dev`

# Change the user ids
usermod -u ${NEWUID} dev
groupmod -g ${NEWGID} dev

# Change the files ownership
find / -not \( -path /proc -prune \) -user ${OLDUID} -exec chown -h ${NEWUID} {} \;
find / -not \( -path /proc -prune \) -group ${OLDGID} -exec chgrp -h ${NEWGID} {} \;

echo "UID and GID changed from ${OLDUID}:${OLDGID} to ${NEWUID}:${NEWGID} for \"dev\""
exit 0

在我的基本映像的Dockerfile中,我添加它並使其可執行:

# Add a script to modify the dev user UID / GID
COPY change-dev-id /usr/local/bin/change-dev-id
RUN chmod +x /usr/local/bin/change-dev-id

然后,我不是更改已安裝文件夾的所有者,而是更改容器用戶的ID以匹配主機上用戶的ID:

# In the Dockerfile of the project's development environment, change the ID of
# the user that must own the files in the volume so that it match the ID of
# the user on the host
RUN change-dev-id 1234

這非常hacky但它​​可以非常方便。 我可以在我的機器上擁有項目的文件,而容器中的用戶也具有正確的權限。

您可以更新腳本的代碼以使用您想要的用戶名(我的總是“dev”)或修改它以將用戶名作為參數傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM