Docker

在 Docker 中更改命名卷的權限

  • November 29, 2021

我使用以下命令啟動了在非 root 使用者上執行的命名卷的 Docker 容器:

docker run -v backup:/backup someimage

在圖像中,有一個備份腳本試圖將文件保存在/backup目錄中,但它失敗了。dir 中掛載backup的捲/backup屬於 root 使用者。

如何更改/backup目錄的權限?

—– 編輯1:

麥克維如下:

使用 Gerrit 執行 docker 容器:

docker run -v backupgerrit:/backup --name gerrit gerritcodereview/gerrit

現在在其他終端視窗嘗試在/backup目錄中保存一些東西:

docker exec gerrit touch /backup/testfile

你會得到:

touch: cannot touch '/backup/testfile': Permission denied

命名卷在首次創建時初始化為安裝位置的映像內容。該初始化包括所有者和權限。如果/backup您的映像中不存在,則將創建一個空目錄並由 root 擁有。你可以:

選項 1:在 Dockerfile 中創建具有適當所有權和權限的目錄:

FROM your-image
USER root
RUN mkdir -p /backup \
&& chown -R your-user /backup
USER your-user

請注意,這僅在備份命名卷不存在或為空時有效。它必須是命名卷,而不是主機捲。

選項 2:使用另一個臨時容器初始化命名卷,包括卷內的一些內容(空文件可以工作):

docker run --rm -v backupgerrit:/backup busybox \
 /bin/sh -c 'touch /backup/.initialized && chown -R 1000:1000 /backup'

選項 3:安裝卷後調整權限,需要容器內的 root:

docker exec -u 0:0 your-container chown -R your-user /backup

引用自:https://serverfault.com/questions/984578