docker-library / postgres

Docker Official Image packaging for Postgres

Home Page:http://www.postgresql.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

chown: changing ownership of '/var/...': Operation not permitted

sfl0r3nz05 opened this issue · comments

Hi,

I am deploying the docker postgres as part of a docker-compose, using a volume (data-volume) to export a .csv file, which is sent to elasticsearch via logstash. When I try to copy a query row to this file via:

const rows = await db.query(COPY (SELECT * FROM tokenoffchain WHERE id = (SELECT MAX(id) FROM tokenoffchain)) TO '${process.env.PATH_ELK_CSV}' WITH CSV DELIMITER ',' HEADER ESCAPE '\n' );

, I get a write permission error. So I create the "docker-entrypoint.sh" and pass it through volume as the figure shown.

image

Considering that I have set both POSTGRES_USER and POSTGRES_PASSWORD as environment variables, I am not clear why I cannot change the property or enable the permissions on the .csv file if the docker-entrypoint.sh is:

image

At this moment, I'm setting the permission manually.

Thanks in advance,

Santiago.

The POSTGRES_USER variable is for the database not for the user in the container

You can also run as an arbitrary user or UID which you could then set any local files/folders to match that arbitrary user
https://github.com/docker-library/docs/tree/master/postgres#arbitrary---user-notes

@wglambert thanks for the response.

I have tried via:

  1. Adding: ALTER ROLE postgres SUPERUSER; as part of my init.sql in order to set postgres as SUPERUSER.
  2. Including "--name" and "postgres" as entrypoint in the docker-compose.

But fail in both cases. Do you know another way to do that?

In additon, I have not found an environmental variable for this purpose.

Thanks in advance.

Santiago.

The entrypoint initdb scripts don't ever run as root, so chown/chmod won't work there and if you need files with different ownership, you'll need to do that before the entrypoint runs (preferably on the host directly, but you could also do something like docker run ... sh -c 'chown ... && chmod ... && exec docker-entrypoint.sh ...'.

Thanks @tianon, since I need to use docker-compose y have tried passing "sh -c 'chown ... && chmod ..." via command, creating the volume (- data-volume:/var/local) before, but it fail until now. I will continue setting permissions manually, until I found a solution.