2015-02-04 16 views
9

Khi tôi cố gắng để bắt đầu postgresql tôi nhận được một lỗi:"gốc" thực hiện của máy chủ PostgreSQL không được phép

postgres 

postgres does not know where to find the server configuration file.
You must specify the --config-file or -D invocation option or set the PGDATA environment variable.

Vì vậy, sau đó tôi cố gắng thiết lập tập tin cấu hình của tôi:

postgres -D /usr/local/var/postgres 

Và tôi nhận được lỗi sau:

postgres cannot access the server configuration file "/usr/local/var/postgres/postgresql.conf": Permission denied

Hmm đuợc. Tiếp theo, tôi cố gắng để thực hiện hành động tương tự như một admin:

sudo postgres -D /usr/local/var/postgres 

Và tôi nhận được lỗi sau:

"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged user ID to prevent possible system security compromise. See the documentation for more information on how to properly start the server.

Tôi googled xung quanh cho rằng thông báo lỗi nhưng không thể tìm thấy một giải pháp.
Có ai có thể cung cấp một số thông tin chi tiết về điều này không?

Trả lời

12

Lệnh của bạn không làm những gì bạn nghĩ. Để chạy một cái gì đó là người dùng hệ thốngpostgres:

sudo -u postgres command

Để chạy lệnh (còn có tên postgres!):

sudo -u postgres postgres -D /usr/local/var/postgres 

lệnh của bạn làm ngược lại:


             
  
    sudo postgres -D /usr/local/var/postgres 
  

Nó chạy chương trình postgres làm superuser root (sudo không có chuyển đổi -u) và Postgres không cho phép chạy với đặc quyền siêu người dùng vì lý do bảo mật. Do đó thông báo lỗi.

Nếu bạn đang chạy một vài lệnh như sử dụng hệ thống postgres, thay đổi cho người dùng:

sudo -u postgres -i 

... và exit khi bạn đang thực hiện.

Nếu bạn thấy thông báo lỗi này khi hoạt động như sử dụng hệ thống postgres, sau đó cái gì là sai với điều khoản trên các tập tin hoặc một trong những thư mục chứa.

postgres cannot access the server configuration file "/usr/local/var/postgres/postgresql.conf": Permission denied /usr/local/var/postgres/postgresql.conf

Cuối cùng:

+0

Làm thế nào để buộc Postgres chạy dưới dạng root nếu tôi thực sự cần điều này dưới docker? – Odysseus

+0

@Odysseus: Bạn không thể. Quá trình máy chủ ('postgres') chủ động từ chối chạy bởi người dùng' root'. Vì sự tỉnh táo. –

0

Đối với những người đang cố gắng chạy lệnh tùy chỉnh bằng hình ảnh đế trình chính thức, hãy sử dụng lệnh sau. docker-entrypoint.sh xử lý việc chuyển đổi người dùng và xử lý các quyền khác.

docker-entrypoint.sh -c 'shared_buffers=256MB' -c 'max_connections=200' 
Các vấn đề liên quan