[英]initdb: could not change permissions of directory on Postgresql container
我是 docker 生態系統的新手,我正在嘗試使用 yaml composer 文件啟動一個簡單的 postgres 容器和一個卷,以便它保留其數據。 該文件如下:
# Use postgres/example user/password credentials
version: '3.3'
services:
db:
image: postgres
environment:
POSTGRES_DB: recrow
POSTGRES_USER: recrow
POSTGRES_PASSWORD: recrow_db_1000
PGDATA: /var/lib/pgsql/data/pgdata
volumes:
- ./pgsql/data:/var/lib/pgsql/data/pgdata
但是,在調用docker-compose -f stack.yml up
,出現以下錯誤:
修復現有目錄 /var/lib/postgresql/data/pgdata 的權限... initdb:無法更改目錄“/var/lib/postgresql/data/pgdata”的權限:不允許操作
/var/lib/pgsql/data/pgdata
應該是相對於容器根目錄的目錄,而./pgsql/data
是主機上的路徑。 我正在從/mnt/storage
上安裝的 ntfs-3g 分區運行容器。 可能是什么問題? 我也在沒有 root 權限的情況下運行 docker,將我的用戶添加到 docker 組,並且該用戶還可以完全訪問上述掛載點/mnt/storage
。
我猜這將與 ntfs-3g 不兼容。 PostgreSQL 映像包含一個入口點腳本,該腳本在容器啟動時進行一些權限更改: https : //github.com/docker-library/postgres/blob/972294a377463156c8d61297320c872fc7d370a9/9.6/docker-entrypoint.sh#L32-L38 我在https://askubuntu.com/questions/11840/how-do-i-use-chmod-on-an-ntfs-or-fat32-partition發現了另一個相關問題,該問題討論了能夠在掛載時設置權限. 但是無法通過chmod
或chown
進行更改(這可能是這種情況下失敗的原因)。
不幸的是,我認為這里的答案是您不能安全地使用 ntfs-3g 來支持 Docker 主機卷安裝。
按照上面@liam-mitchell 的注釋,這就是答案。 使用如下命名的卷:
services:
db:
image: postgres:12-alpine
volumes:
- "postgres:/data/postgres"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- PGDATA=/data/postgres
...
volumes:
postgres:
我使用 OpenShift 並且在從 Docker Hub 運行這個官方鏡像時遇到了同樣的問題。
就我而言,解決方案是使用來自 red hat 存儲庫的官方 postgres 圖像,來自 red hat 存儲庫的圖像已解決此問題,這可以作為替代方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.