PostgreSQL в контейнере выдает ошибку chmod: / var / lib / postgresql / data: операция не разрешена - PullRequest
0 голосов
/ 17 апреля 2020

Я попытался запустить Postgres 12 на docker и следующих файлах, которые я создал. Я не понимаю, где я допустил ошибку и в чем проблема разрешения файла PostgreSQL.

Dockerfile:

FROM postgres:12.0-alpine
USER root
RUN chmod 0775 /var/lib/postgresql
RUN chown postgres /var/lib/postgresql
USER postgres
# RUN chmod 0775 /var/lib/postgresql
# RUN chown postgres /var/lib/postgresql
RUN ls -l /var/lib/postgresql
# RUN pgctl -D /usr/local/psql/data initdb &&\
RUN initdb -D /var/lib/postgresql/data &&\
    echo "host all  all    0.0.0.0/0  md5" >> /var/lib/postgresql/data/pg_hba.conf && \
    echo "listen_addresses='*'" >> /var/lib/postgresql/data/postgresql.conf && \
    pg_ctl start && \
    psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'test'" | grep -q 1 || psql -U postgres -c "CREATE DATABASE test" && \
    psql --command "ALTER USER postgres WITH ENCRYPTED PASSWORD '123';"
# RUN initdb /var/lib/postgresql/data &&\
#     echo "host all  all    0.0.0.0/0  md5" >> /var/lib/postgresql/data/pg_hba.conf && \
#     echo "listen_addresses='*'" >> /var/lib/postgresql/data/postgresql.conf && \
#     pg_ctl start && \
#     psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'test'" | grep -q 1 || psql -U postgres -c "CREATE DATABASE test" && \
#     psql --command "ALTER USER postgres WITH ENCRYPTED PASSWORD '123';"
# Add VOLUMEs to allow backup of config, logs and databases
VOLUME  ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]
EXPOSE 5432

docker - составить .yml

version: "3.7"
services:
  postgresql:
    build:
      context: .
      dockerfile: ./../postgresql/Dockerfile
    volumes:
      - ../postgresql/db_data:/var/lib/postgresql/data
    ports:
      - 5432:5432

Я выполнил следующую команду в терминале

docker-compose up

Произошла следующая ошибка.

Building mydb_postgresql
Step 1/6 : FROM postgres:12-alpine
 ---> ecb176ff304a
Step 2/6 : USER postgres
 ---> Running in ee9fe8ed246f
Removing intermediate container ee9fe8ed246f
 ---> 8dfa002a5fab
Step 3/6 : RUN ls -l /var/lib/postgresql
 ---> Running in 08d98e1ea7b2
total 4
drwxrwxrwx    2 postgres postgres      4096 Mar 23 23:58 data
Removing intermediate container 08d98e1ea7b2
 ---> 548bb96ed8db
Step 4/6 : RUN initdb -D /var/lib/postgresql/data &&    echo "host all  all    0.0.0.0/0  md5" >> /var/lib/postgresql/data/pg_hba.conf &&     echo "listen_addresses='*'" >> /var/lib/postgresql/data/postgresql.conf &&     pg_ctl start &&     psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'mydb'" | grep -q 1 || psql -U postgres -c "CREATE DATABASE mydb" &&     psql --command "ALTER USER postgres WITH ENCRYPTED PASSWORD '123';"
 ---> Running in dbee0a2346df
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... UTC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... sh: locale: not found
2020-04-17 18:16:13.112 UTC [11] WARNING:  no usable system locales were found
ok
syncing data to disk ... ok


Success. You can now start the database server using:

    pg_ctl -D /var/lib/postgresql/data -l logfile start

initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
waiting for server to start....2020-04-17 18:16:13.427 UTC [15] LOG:  starting PostgreSQL 12.2 on x86_64-pc-linux-musl, compiled by gcc (Alpine 9.2.0) 9.2.0, 64-bit
2020-04-17 18:16:13.427 UTC [15] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2020-04-17 18:16:13.427 UTC [15] LOG:  listening on IPv6 address "::", port 5432
2020-04-17 18:16:13.433 UTC [15] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2020-04-17 18:16:13.447 UTC [16] LOG:  database system was shut down at 2020-04-17 18:16:13 UTC
2020-04-17 18:16:13.451 UTC [15] LOG:  database system is ready to accept connections
 done
server started
CREATE DATABASE
ALTER ROLE
Removing intermediate container dbee0a2346df
 ---> 8fd449f2a9e2
Step 5/6 : VOLUME  ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]
 ---> Running in 76f4b6ee235e
Removing intermediate container 76f4b6ee235e
 ---> 343b2ddca9d2
Step 6/6 : EXPOSE 5432
 ---> Running in 306d1fd18818
Removing intermediate container 306d1fd18818
 ---> aa732eb5b2b6

Successfully built aa732eb5b2b6
Successfully tagged services_mydb_postgresql:latest
WARNING: Image for service mydb_postgresql was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating services_mydb_postgresql_1 ... done
Attaching to services_mydb_postgresql_1
mydb_postgresql_1  | chmod: /var/lib/postgresql/data: Operation not permitted
services_mydb_postgresql_1 exited with code 1

Я не знаю, что происходит и почему мой процесс остановился.

...