我有以下 docker-compose 檔案
version: '3.7'
volumes:
postgres-data:
services:
postgres:
environment:
- POSTGRES_PASSWORD=mypwd
- POSTGRES_USER=randomuser
image: 'postgres:14'
restart: always
volumes:
- './postgres-data:/var/lib/postgresql/data'
我似乎對音量有多個問題:
postgres-data當我運行時,在 docker-compose 檔案位置創建了一個名為的檔案夾up,盡管對于其他影像,它們似乎被放置在/var/lib/docker/volumes檔案夾中(不創建這樣的檔案夾)。這是預期的嗎?在與 docker-compose 檔案相同的位置創建卷檔案夾而不是/var/lib/docker/volumes檔案夾是一個好習慣嗎?- 這個檔案夾的所有權很奇怪,我無法以當前用戶的身份進入它(盡管我在 docker 組中)。
我嘗試閱讀影像檔案,尤其是“任意 --user Notes”,但不明白如何處理它。我也嘗試不設定 POSTGRES_USER(然后默認為 postgres),但結果是一樣的。
使用此影像創建卷的正確方法是什么?
uj5u.com熱心網友回復:
您的卷掛載明確指向當前目錄的子目錄
volumes:
- './postgres-data:/var/lib/postgresql/data'
# ^^ (a slash before the colon always means a bind mount)
如果要使用命名卷,則需要在 Compose 檔案的頂層宣告,并在使用時參考卷名(不帶斜杠)
volumes:
postgres-data:
services:
...
volumes:
- 'postgres-data:/var/lib/postgresql/data'
# ^^ (no slash)
在這種情況下,一個并不比另一個“更好”。系結掛載的主機目錄更容易備份;命名卷在 MacOS 或 Windows 上會明顯更快;系結掛載可以直接查看和編輯檔案;您可以使用 Docker 生態系統來清理命名卷。特別是對于資料庫,查看資料檔案不是很有用,我可能更喜歡命名卷,但這根本不是一個強烈的偏好。
系結掛載的檔案所有權是一個常見問題。在本機 Linux 上,數字用戶 ID 是權限檢查唯一重要的東西。這由/etc/passwd檔案決議為用戶名,但主機和容器具有該檔案的不同副本(這沒關系)。您ls -l從主機看到的不尋常所有者與影像中默認用戶的數字uid匹配postgres。
不過,該映像設計良好,Docker Hub 檔案中的部分的結果是您可以指定任何user:想要的Compose ,可能與擁有該目錄的主機 uid 匹配。
sudo rm -rf ./postgres-data # with the wrong owner
id -u # what's my current numeric uid?
version: '3.8'
services:
postgres:
volumes: # using a host directory
- './postgres-data:/var/lib/postgresql/data'
user: 1000 # matches the `id -u` output
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/366802.html
標籤:PostgreSQL的 码头工人 docker-compose
