Docker
在 Docker 中更改命名卷的權限
我使用以下命令啟動了在非 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