Postgresql 如何为postgres日志文件夹设置卷-权限被拒绝错误
目前,我想挂载postgres的日志文件夹,这样即使在主机重新启动后,日志信息仍然保留 我使用以下Postgresql 如何为postgres日志文件夹设置卷-权限被拒绝错误,postgresql,docker,Postgresql,Docker,目前,我想挂载postgres的日志文件夹,这样即使在主机重新启动后,日志信息仍然保留 我使用以下docker compose.yml docker-compose.yml 但是,我得到以下权限被拒绝错误 postgres_1 | 2018-02-19 09:03:45.359 UTC [1] LOG: database system is shut down postgres_1 | 2018-02-19 09:04:45.963 UTC [1
docker compose.yml
docker-compose.yml
但是,我得到以下权限被拒绝错误
postgres_1 | 2018-02-19 09:03:45.359 UTC [1] LOG: database system is shut down
postgres_1 | 2018-02-19 09:04:45.963 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
postgres_1 | 2018-02-19 09:04:45.963 UTC [1] LOG: listening on IPv6 address "::", port 5432
postgres_1 | 2018-02-19 09:04:45.965 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1 | 2018-02-19 09:04:45.972 UTC [1] FATAL: could not open log file "/logs/postgresql-2018-02-19_090445.log": Permission denied
postgres_1 | 2018-02-19 09:04:45.974 UTC [1] LOG: database system is shut down
postgres_1 | 2018-02-19 09:05:46.741 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
postgres_1 | 2018-02-19 09:05:46.741 UTC [1] LOG: listening on IPv6 address "::", port 5432
postgres_1 | 2018-02-19 09:05:46.744 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1 | 2018-02-19 09:05:46.753 UTC [1] FATAL: could not open log file "/logs/postgresql-2018-02-19_090546.log": Permission denied
postgres_1 | 2018-02-19 09:05:46.755 UTC [1] LOG: database system is shut down
postgres_1 | 2018-02-19 09:06:47.366 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
postgres_1 | 2018-02-19 09:06:47.366 UTC [1] LOG: listening on IPv6 address "::", port 5432
postgres_1 | 2018-02-19 09:06:47.368 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1 | 2018-02-19 09:06:47.375 UTC [1] FATAL: could not open log file "/logs/postgresql-2018-02-19_090647.log": Permission denied
postgres_1 | 2018-02-19 09:06:47.377 UTC [1] LOG: database system is shut down
有人知道如何解决此类错误吗?第二次编辑 经过一些阅读,似乎不可能做到这一点,你需要的方式。在使用docker compose声明卷时,您需要能够定义文件所有权,docker引擎不支持这一点。但你可以考虑一些解决方案,查看更多细节。 作为一种解决方法,您可以创建扩展postgres的Dockerfile并添加以下内容:
# ...
RUN mkdir /logs
RUN chown postgres:postgres /logs
编辑
经过一些实验后,这是可行的:
version: '2'
services:
postgres:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=55F4rGFwsXXXXXX
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./:/logs:z
# Make Postgres log to a file.
# More on logging with Postgres: https://www.postgresql.org/docs/current/static/runtime-config-logging.html
command: postgres -c logging_collector=on -c log_destination=stderr -c log_directory=/logs
volumes:
postgres_data:
原始答案
我无意中通过这样做使其工作,首先运行docker compose并使用此docker compose文件:
version: '2'
services:
postgres:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=55F4rGFwsXXXXXX
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- postgres_logs:/logs:z
# Make Postgres log to a file.
# More on logging with Postgres: https://www.postgresql.org/docs/current/static/runtime-config-logging.html
command: /bin/bash -c "mkdir -p /logs && chmod -R 777 /logs && postgres -c logging_collector=on -c log_destination=stderr -c log_directory=/logs"
volumes:
postgres_data:
postgres_logs:
这在以下情况下失败:
postgres_1 | PostgreSQL server的“根”执行不可用
被允许postgres_1 |服务器必须在
防止postgres|u 1 |可能的系统安全的非特权用户ID
妥协。更多信息,请参见postgres|u 1的文档
关于如何正确启动服务器
恢复对命令的更改并再次运行后,可以正常工作,但显然这不是一个解决方案,因此请坚持上面编辑的答案。问题在于主机中的权限,而不是容器中的权限 所以在主持人当中,
chmod -R 777 postgres_logs
添加z标志没有帮助。仍然产生相同的权限被拒绝错误。奇怪在我的计算机中工作正常,我使用osx。我从头开始重新创建只是为了确定。在再次执行
docker compose-down-v
之前,我通过执行docker compose-build
和docker compose-up-d
显式删除了卷,之后,我使用docker compose-logs再次检查—跟随postgres
谢谢。但是-./:/logs:z
正在映射到主机本地文件夹。我要找的是映射到docker卷。谢谢。在Dockerfile中使用运行mkdir/postgres_日志
和运行chown postgres:postgres/postgres_日志
可以解决问题。
chmod -R 777 postgres_logs