我正在 docker 中部署 postgres 并嘗試輸出一些日志,但是,我收到一條錯誤訊息,提示日志檔案的權限被拒絕。如果我禁用日志記錄,一切正常。僅當我啟用日志收集時才會發生權限。
這是我的 docker-compose 的片段:
postgres_db:
image: postgres:14.1
restart: unless-stopped
environment:
- POSTGRES_USER=${BP_ADMIN_USER}
- POSTGRES_PASSWORD=${BP_ADMIN_PASSWORD}
volumes:
- ./admin/${BP_ENV:-dev}/database:/docker-entrypoint-initdb.d
- ./admin/${BP_ENV:-dev}/config:/mnt/admin
- ./data/log_db:/mnt/log
- ./data/hist_data:/mnt/data
- ./data/postgres:/var/lib/postgresql/data
command: postgres -c logging_collector=on -c log_rotation_age=1d -c log_directory=/mnt/log -c log_destination='stderr' -c log_filename='postgresql-%Y-%m-%d_%H%M%S.log'
ports:
- "5432:5432"
錯誤如下:
UTC [1] FATAL: could not open log file "/mnt/log/postgresql-2022-01-10_224118.log": Permission denied
我在 Linux Ubuntu 20-04 VM 上運行它。我看到了一些答案,他們更改了主機目錄的權限。那是我不想做的事情。我還看到了一些舊的 2016 年解決方法的答案。但我想知道現在是否有更優雅的解決方案。
注意:直到今天早上我才收到此錯誤。無論出于何種原因,它上周都在作業。
uj5u.com熱心網友回復:
Postgres 在容器內的 UID 999 名為“postgres”的用戶下運行。當該用戶訪問您從主機系結掛載的檔案時,容器 UID 需要有權訪問主機上的這些檔案。
您收到錯誤訊息,因為 UID 999 無權訪問./data/log_db/postgresql-2022-01-10_224118.log您的主機。
要允許 docker 用戶在目錄中創建檔案,可以將目錄的組所有者更改為組 999(即容器中 postgres 用戶的組 id)。將目錄設定為所有者和組成員可以完全訪問。然后在目錄上設定 setgid 位,這樣目錄中的所有檔案都將繼承組所有權。
chown :999 ./data/log_db
chmod 770 ./data/log_db
chmod g s ./data/log_db
現在你應該可以運行你的容器了。您將看到創建的日志檔案歸用戶“999”所有,并且只能由該用戶(和 root)訪問。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408047.html
標籤:
