Postgres FATAL:无法打开日志文件权限被拒绝
Postgres FATAL: could not open log file permission denied
我正在 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 虚拟机上。我看到了一些答案,他们更改了主机目录的权限。那是我不想做的事情。我还看到了一些 2016 年的变通办法。但我想知道现在是否有更优雅的解决方案。
注意:直到今天早上我才收到这个错误。无论出于何种原因,它上周都在工作。
Postgres 运行s 在名为 'postgres' 的用户下,容器内的 UID 为 999。当该用户访问您从主机绑定挂载的文件时,容器 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)访问。
我正在 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 虚拟机上。我看到了一些答案,他们更改了主机目录的权限。那是我不想做的事情。我还看到了一些 2016 年的变通办法。但我想知道现在是否有更优雅的解决方案。
注意:直到今天早上我才收到这个错误。无论出于何种原因,它上周都在工作。
Postgres 运行s 在名为 'postgres' 的用户下,容器内的 UID 为 999。当该用户访问您从主机绑定挂载的文件时,容器 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)访问。