簡體   English   中英

寫在共享卷docker中

[英]write in shared volumes docker

我有一個帶有php應用程序的docker

例如,我有一個分享量

/home/me/dev/site <=> /var/www/site

我可以在我的主機上寫一些東西,它會與容器同步

如果我發射

sudo docker exec test touch /var/www/site/test.txt

有用

但是,如果我的服務器嘗試將文件創建為www-data則由於權限而無法正常工作。

有沒有辦法讓我的共享卷訪問www-data

我正在使用boot2docker

Docker中的(綁定安裝的)卷將保留在Docker主機上設置的權限。 您可以使用它來設置這些文件和目錄的權限,然后在容器中使用它們。

一些背景 ;

Linux中的權限基於用戶和組ID'uid' / 'gid' )。 即使你看到一個用戶和組作為所有者,這些名字是不是在Linux的真正重要的是,他們只是在那里讓你更容易,看看誰是一個文件的所有者(它們從抬頭/etc/passwd文件)。

您可以在文件上設置任何 uid / gid ; 設置這些權限時,用戶不必存在 例如;

touch foobar && sudo chown 1234:5678 foobar && ls -la foobar

# UID and GID are set to 1234 / 5678, even though there's no such user
-rw-rw-r-- 1 1234 5678 0 Mar 25 19:14 foobar

檢查權限(容器內部和外部)

如上所述,Docker在使用卷時維護主機的所有權。 此示例顯示卷中的權限和所有權在容器外部內部是相同的;

# (First create a dummy site)

mkdir -p volume-example/site && cd volume-example
echo "<html><body>hello world</body></html>" > site/index.html

# Permissions on the Docker host;

ls -n site

# total 4
# -rw-rw-r-- 1 1002 1002 38 Mar 25 19:15 index.html

# And, permissions inside a nginx container, using it as volume;

sudo docker run --rm -v $(pwd)/site:/var/www nginx ls -n /var/www

# total 4
# -rw-rw-r-- 1 1002 1002 38 Mar 25 19:15 index.html

設置權限

如上所述,用戶不必存在才能使用它們,所以即使我們在Docker主機上沒有www-data用戶,如果我們知道“uid”,我們仍然可以設置正確的權限。該用戶在容器內的“gid”;

讓我們看看www-data用戶的uid和gid在容器是什么;

sudo docker run --rm nginx id www-data

# uid=33(www-data) gid=33(www-data) groups=33(www-data)

首先更改權限之前檢查狀態。 這次我們以用戶www-data運行nginx容器;

sudo docker run \
  --rm \
  --volume $(pwd)/site:/var/www \
  --user www-data nginx touch /var/www/can-i-write.txt

# touch: cannot touch `/var/www/can-i-write.txt': Permission denied

接下來,在本地目錄上設置權限,看看我們是否能夠寫入;

sudo chown -R 33:33 site

sudo docker run \
   --rm \
   --volume $(pwd)/site:/var/www \
   --user www-data nginx touch /var/www/can-i-write.txt

成功!

將以下行添加到dockerfile並重建映像

RUN usermod -u 1000 www-data
RUN usermod -G staff www-data

暫無
暫無

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

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