Postgresql 如何为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

目前,我想挂载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] 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