অফিসিয়াল পোস্টগ্রিসএসকিউএল ডকার চিত্রের কনফিগারেশন ফাইলটি কীভাবে কাস্টমাইজ করবেন?


107

আমি অফিসিয়াল পোস্টগ্রিস ডকার চিত্রটি এর কনফিগারেশনটি কাস্টমাইজ করার চেষ্টা করছি। এই উদ্দেশ্যে, আমি উদাহরণটি উদাহরণস্বরূপ sedপরিবর্তনের max_connectionsজন্য ব্যবহার করি :

sed -i -e"s/^max_connections = 100.*$/max_connections = 1000/" /var/lib/postgresql/data/postgresql.conf

এই কনফিগারেশনটি প্রয়োগ করতে আমি দুটি পদ্ধতির চেষ্টা করেছি। প্রথমটি হ'ল একটি স্ক্রিপ্টে কমান্ড যুক্ত করা এবং এটি init ফোল্ডারে "/docker-entryPoint-initdb.d" এর মধ্যে অনুলিপি করা। দ্বিতীয় পদ্ধতিটি হ'ল এগুলিকে আমার ডকফিলের মধ্যে "আরএন" কমান্ড দিয়ে সরাসরি চালানো (এই পদ্ধতিটি একটি বেসরকারী পোস্টগ্র্যাস্কিল চিত্রের সাথে কনফিগারেশন ফাইল "/ etc / postgres / ..." এর ভিন্ন পথের সাথে দুর্দান্ত কাজ করেছে)। উভয় ক্ষেত্রেই পরিবর্তনগুলি ব্যর্থ হয়েছে কারণ কনফিগারেশন ফাইলটি অনুপস্থিত (আমার মনে হয় এটি এখনও তৈরি হয়নি)।

আমার কনফিগারেশনটি কীভাবে পরিবর্তন করা উচিত?

সম্পাদনা 1:

চিত্রটি তৈরি করতে এখানে ডকফায়াইল ব্যবহৃত হয়:

# Database (http://www.cs3c.ma/)

FROM postgres:9.4
MAINTAINER Sabbane <contact@cs3c.ma>

ENV TERM=xterm

RUN apt-get update
RUN apt-get install -y nano

ADD scripts /scripts
# ADD scripts/setup-my-schema.sh /docker-entrypoint-initdb.d/

# Allow connections from anywhere.
RUN sed -i -e"s/^#listen_addresses =.*$/listen_addresses = '*'/" /var/lib/postgresql/data/postgresql.conf
RUN echo "host    all    all    0.0.0.0/0    md5" >> /var/lib/postgresql/data/pg_hba.conf

# Configure logs
RUN sed -i -e"s/^#logging_collector = off.*$/logging_collector = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_directory = 'pg_log'.*$/log_directory = '\/var\/log\/postgresql'/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_filename = 'postgresql-\%Y-\%m-\%d_\%H\%M\%S.log'.*$/log_filename = 'postgresql_\%a.log'/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_file_mode = 0600.*$/log_file_mode = 0644/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_truncate_on_rotation = off.*$/log_truncate_on_rotation = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_rotation_age = 1d.*$/log_rotation_age = 1d/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_min_duration_statement = -1.*$/log_min_duration_statement = 0/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_checkpoints = off.*$/log_checkpoints = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_connections = off.*$/log_connections = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_disconnections = off.*$/log_disconnections = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^log_line_prefix = '\%t \[\%p-\%l\] \%q\%u@\%d '.*$/log_line_prefix = '\%t \[\%p\]: \[\%l-1\] user=\%u,db=\%d'/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_lock_waits = off.*$/log_lock_waits = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_temp_files = -1.*$/log_temp_files = 0/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#statement_timeout = 0.*$/statement_timeout = 1800000        # in milliseconds, 0 is disabled (current 30min)/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^lc_messages = 'en_US.UTF-8'.*$/lc_messages = 'C'/" /var/lib/postgresql/data/postgresql.conf

# Performance Tuning
RUN sed -i -e"s/^max_connections = 100.*$/max_connections = 1000/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^shared_buffers =.*$/shared_buffers = 16GB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#effective_cache_size = 128MB.*$/effective_cache_size = 48GB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#work_mem = 1MB.*$/work_mem = 16MB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#maintenance_work_mem = 16MB.*$/maintenance_work_mem = 2GB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#checkpoint_segments = .*$/checkpoint_segments = 32/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#checkpoint_completion_target = 0.5.*$/checkpoint_completion_target = 0.7/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#wal_buffers =.*$/wal_buffers = 16MB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#default_statistics_target = 100.*$/default_statistics_target = 100/" /var/lib/postgresql/data/postgresql.conf


VOLUME ["/var/lib/postgresql/data", "/var/log/postgresql"]

CMD ["postgres"]

এই ডকফায়াইলের সাহায্যে বিল্ড প্রক্রিয়াটি ত্রুটিটি দেখায়: sed: can't read /var/lib/postgresql/data/postgresql.conf: No such file or directory


4
একটি পদ্ধতি হ'ল অফিশিয়াল ইমেজটি ব্যবহার করা, এটি শুরু করা, এর সাথে সংযোগ করে docker exec -it container_id bashতারপরে আপনার পরিবর্তনগুলি করুন, তারপরে docker commit container_id myuser/myimage_myPostegresql:myversionডকটি দেখুন ডকস.ডকার
রেফারেন্স

4
আমি মনে করি ডকার দৃষ্টান্তের একটি সুবিধা হ'ল সম্পূর্ণ বিল্ডিং প্রক্রিয়াটি স্বয়ংক্রিয়করণ করা। অন্য চিত্র হিসাবে উল্লিখিত হিসাবে paintedfox/postgresql, সরাসরি ডকফাইফিলের মধ্যে কনফিগারেশন পরিবর্তন করা সম্ভব। আমি মনে করি এটি সরকারী চিত্রের সাথেও সম্ভব হওয়া উচিত।
সাকর

সেড পদ্ধতিটি কাজ করা উচিত, আপনি কি আপনার ডকোকারফিল বা একটি সম্পূর্ণ পুনরুত্পাদনকারী পোস্ট করতে পারেন?
ব্যবহারকারী 2915097

উত্তর:


58

postgres:9.4আপনি যে চিত্রটি থেকে উত্তরাধিকারসূত্রে করেছি একটি ভলিউম ঘোষণা/var/lib/postgresql/data । এর অর্থ হ'ল আপনি নিজের ছবিতে কোনও ফাইল অনুলিপি করতে পারবেন না; পরিবর্তনগুলি বাতিল করা হবে।

আপনার কয়েকটি পছন্দ আছে:

  • রান-টাইমে আপনি খালি নিজের কনফিগারেশন ফাইলগুলিকে ভলিউম হিসাবে যুক্ত করতে পারেন docker run -v postgresql.conf:/var/lib/postgresql/data/postgresql.conf ...। তবে, আমি নিশ্চিত না যে এটি কীভাবে বিদ্যমান ভলিউমের সাথে ইন্টারেক্ট করবে।

  • ধারক শুরু হওয়ার পরে আপনি ফাইলটি অনুলিপি করতে পারবেন। এটি করার জন্য, আপনার ফাইলটি এমন কোনও স্থানে বিল্ডে অনুলিপি করুন যা ভলিউমের নীচে নেই তারপরে প্রবেশপথ বা সেন্টিমিডি থেকে একটি স্ক্রিপ্ট কল করুন যা ফাইলটি সঠিকভাবে সংশোধন করতে এবং পোস্টগ্রিজ শুরু করবে।

  • পোস্টগ্রিস অফিসিয়াল ইমেজের পিছনে প্রকল্পটি ক্লোন করুন এবং ভলিউম ঘোষণা হওয়ার আগে নিজের কনফিগারেশন ফাইলটি যুক্ত করতে ডকফায়াইল সম্পাদনা করুন (ভলিউম নির্দেশাবলীর রান-টাইমে স্বয়ংক্রিয়ভাবে অনুলিপি হওয়ার আগে যে কোনও কিছু যুক্ত করা হবে)।

  • ডকার-কমপোজ ফাইলটিতে কমান্ড বিকল্পে সমস্ত কনফিগার পরিবর্তনগুলি পাস করুন Pass

পছন্দ:

services:
  postgres:
    ...  
    command:
      - "postgres"
      - "-c"
      - "max_connections=1000"
      - "-c"
      - "shared_buffers=3GB"
      - "-c"
      ...

4
এটি ছিল, পরিবর্তনগুলি ডকফাইফিলের মধ্যে হওয়া উচিত নয়। আমি এগুলিকে একটি স্ক্রিপ্টে স্থানান্তরিত করেছি এবং এন্ট্রিপয়েন্ট থেকে এটিকে কল করেছি এবং এটি এখন দুর্দান্ত কাজ করেছে। উত্তরের জন্য ধন্যবাদ.
সাকর

4
আমি সবে স্ক্রিপ্টটি আর ডি ফোল্ডারে "/docker-entryPoint-initdb.d/" এর মধ্যে অনুলিপি করেছি এবং এটি এবারও দুর্দান্ত কাজ করেছে। এটি অদ্ভুত তবে এটি বেশিরভাগ চিত্রের সাথে ব্যবহার করার মতো আমি ডকফাইফিলের সাথে চিত্রটি স্থাপনের বিষয়ে এতটা মনোনিবেশ করেছিলাম বলে মনে হয়েছিল যে আমি init স্ক্রিপ্টটি ব্যবহার করে আমার প্রথম চেষ্টা করে কিছু মিস করেছি।
সাকর

"এর অর্থ হ'ল আপনি নিজের ছবিতে যে কোনও ফাইল অনুলিপি করতে পারবেন না; পরিবর্তনগুলি বাতিল করা হবে।" আপনি দয়া করে ব্যাখ্যা করতে পারেন যে কেন ঘটনা?
ইস্কো

@ আইসকো সরকারী দস্তাবেজগুলিতে খণ্ড খণ্ড তাকান। মূলত ভলিউমগুলি ইমেজটিতে নয় তবে হোস্টে সংরক্ষণ করা হয়, তাই ডেটাটি ইমেজটিতে নয়, হোস্টে সংরক্ষণ করা হবে। ডেটা রাখতে আপনাকে একই ভলিউমের সাথে সংযুক্ত কন্টেইনারটি শুরু করতে হবে।
অ্যাড্রিয়ান মৌআত

আমি /var/lib/postgres/data/pg_hba.conf এ পরিবর্তিত হয়েছি কেবল সংযোগ গ্রহণের জন্য সমস্ত 192.168.0.0/0 এমডি 5 হোস্ট এবং সমস্ত এমডি 5 মন্তব্য করা হয় (ডিফল্ট হয়)। তবে প্রভাব বদলাবেন না
লুকাস রিসেন্ডে

85

ডকার রচনা সহ

যখন Docker কম্পোজ সঙ্গে কাজ করলেন, আপনি ব্যবহার করতে পারেন command: postgres -c option=valueআপনার docker-compose.ymlPostgres কনফিগার করতে।

উদাহরণস্বরূপ, এটি পোস্টগ্র্রেস কোনও ফাইলে লগ করে তোলে:

command: postgres -c logging_collector=on -c log_destination=stderr -c log_directory=/logs

ভোজটেক ভিটেকের উত্তরটি মানিয়ে নেওয়া , আপনি ব্যবহার করতে পারেন

command: postgres -c config_file=/etc/postgresql.conf

কনফিগার ফাইল পরিবর্তন করতে পোস্টগ্রিস ব্যবহার করবে। আপনি নিজের কাস্টম কনফিগারেশন ফাইলটিকে একটি ভলিউম দিয়ে মাউন্ট করতে পারবেন:

volumes:
   - ./customPostgresql.conf:/etc/postgresql.conf

docker-compose.ymlপোস্টগ্রিসটি কীভাবে কনফিগার করতে হয় তা দেখিয়ে এখানে আমার অ্যাপ্লিকেশনটি এখানে :

# Start the app using docker-compose pull && docker-compose up to make sure you have the latest image
version: '2.1'
services:
  myApp:
    image: registry.gitlab.com/bullbytes/myApp:latest
    networks:
      - myApp-network
  db:
     image: postgres:9.6.1
     # 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
     environment:
       # Provide the password via an environment variable. If the variable is unset or empty, use a default password
       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-4WXUms893U6j4GE&Hvk3S*hqcqebFgo!vZi}
     # If on a non-Linux OS, make sure you share the drive used here. Go to Docker's settings -> Shared Drives
     volumes:
       # Persist the data between container invocations
       - postgresVolume:/var/lib/postgresql/data
       - ./logs:/logs
     networks:
       myApp-network:
         # Our application can communicate with the database using this hostname
         aliases:
           - postgresForMyApp
networks:
  myApp-network:
    driver: bridge
# Creates a named volume to persist our data. When on a non-Linux OS, the volume's data will be in the Docker VM
# (e.g., MobyLinuxVM) in /var/lib/docker/volumes/
volumes:
  postgresVolume:

লগ ডিরেক্টরিতে লেখার অনুমতি

নোট করুন যে লিনাক্সের সময় হোস্টের লগ ডিরেক্টরিতে অবশ্যই সঠিক অনুমতি থাকতে হবে permission অন্যথায় আপনি কিছুটা বিভ্রান্তিকর ত্রুটি পাবেন

FATAL: "/ loggs/postgresql-2017-02-04_115222.log" লগ ফাইল খুলতে পারেনি: অনুমতি অস্বীকার করা হয়েছে

আমি বিভ্রান্তিকর বলে, ত্রুটির বার্তা প্রস্তাব দেওয়া থেকে ডিরেক্টরিটি কন্টেইনারে ভুল অনুমতি রয়েছে, যখন বাস্তবে ডিরেক্টরির হোস্ট লেখা অনুমতি দেয় না।

এটি ঠিক করার জন্য, আমি হোস্টের সাহায্যে সঠিক অনুমতিগুলি সেট করেছি

chgroup ./logs docker && chmod 770 ./logs

আপনি কি স্টাগআউট এবং ডকার লগগুলি ব্যবহার করার পরিবর্তে কোনও ফাইলটিতে পোস্টগ্র্রেস লগ করার পরামর্শ দিচ্ছেন? গিথুব ইস্যুতে ক্রস লিঙ্কিংয়ের জন্য কুদোস !
jpic

4
ফাইলে লগিং করা বা ডকার লগগুলি ব্যবহার করা পছন্দনীয়, জাইপিকের বিষয়ে সিদ্ধান্ত নিয়েছি না।
ম্যাথিয়াস ব্রাওন

আপনি পাসওয়ার্ডটি জুড়েছেন, যা আপনি সম্ভবত এখানে মুখোশটি করতে চাইবেন
'14:56 এ ভিজিট করুন

4
@ উইডস্টিজ: আমি এই র্যান্ডম স্ট্রিংটিকে পাসওয়ার্ড হিসাবে ব্যবহার করি না, এটি কেবল প্রদর্শনের জন্য।
ম্যাথিয়াস ব্রাউন

4
@ গেরম্যান: আপনি কি এটি আপনার ডকফাইলে যুক্ত করেছেন? কারণ আপনার উচিত নয়। আমার উত্তর ব্যবহার করে docker-compose.yml
ম্যাথিয়াস ব্রাউন

40

পোস্টগ্রিস ডকার পাত্রে কাস্টম পোস্টগ্রেকসএল.কনফ ইনজেক্ট করুন

ডিফল্ট postgresql.confফাইলটি ডিয়ারের মধ্যেই থাকে PGDATA( /var/lib/postgresql/dataযা বিশেষত প্রথমবারের জন্য পোস্টগ্রিজ ধারক চালানোর সময় জিনিসগুলি আরও জটিল করে তোলে, যেহেতু docker-entrypoint.shমোড়ক দির আরম্ভের initdbজন্য পদক্ষেপের অনুরোধ করে PGDATA

ডকারে পোস্টগ্রেএসকিউএল কনফিগারেশন ধারাবাহিকভাবে কাস্টমাইজ করতে, আমি config_fileডকারের ভলিউমের সাথে পোস্টগ্রিস বিকল্পটি একসাথে ব্যবহার করার পরামর্শ দিচ্ছি :

উত্পাদনের ডাটাবেস (পিজিডিটিএ ডায়ার অবিরত ভলিউম হিসাবে)

docker run -d \
-v $CUSTOM_CONFIG:/etc/postgresql.conf \
-v $CUSTOM_DATADIR:/var/lib/postgresql/data \
-e POSTGRES_USER=postgres \
-p 5432:5432 \
--name postgres \
postgres:9.6 postgres -c config_file=/etc/postgresql.conf

পরীক্ষার ডাটাবেস (PGDATA dir পরে বাদ দেওয়া হবে docker rm)

docker run -d \
-v $CUSTOM_CONFIG:/etc/postgresql.conf \
-e POSTGRES_USER=postgres \
--name postgres \
postgres:9.6 postgres -c config_file=/etc/postgresql.conf

ডিবাগিং

  1. সার্ভার লগগুলি সরাসরি দেখতে কমান্ড -dথেকে (বিচ্ছিন্ন বিকল্প) সরান docker run
  2. পিএসকিএল ক্লায়েন্টের সাথে পোস্টগ্রিস সার্ভারের সাথে সংযোগ করুন এবং কনফিগারেশনটি কোয়েরি করুন:

    docker run -it --rm --link postgres:postgres postgres:9.6 sh -c 'exec psql -h $POSTGRES_PORT_5432_TCP_ADDR -p $POSTGRES_PORT_5432_TCP_PORT -U postgres'
    
    psql (9.6.0)
    Type "help" for help.
    
    postgres=# SHOW all;
    

30

আপনি যখন অফিশিয়াল এন্ট্রিপয়েন্টটি চালাবেন (আপনি যখন ধারকটি চালু করবেন তখন এ কেএ) এটি চালিত initdbহয় $PGDATA( /var/lib/postgresql/dataডিফল্টরূপে) এবং তারপরে এটি সেই ডিরেক্টরিতে এই 2 টি ফাইল সংরক্ষণ করে:

  • postgresql.conf ডিফল্ট ম্যানুয়াল সেটিংস সহ।
  • postgresql.auto.confALTER SYSTEMকমান্ডের সাহায্যে সেটিংস স্বয়ংক্রিয়ভাবে ওভার্রাইড হয়ে যায়।

এন্ট্রিপয়েন্টটি কোনও /docker-entrypoint-initdb.d/*.{sh,sql}ফাইল কার্যকর করে।

এর সমস্ত অর্থ আপনি সেই ফোল্ডারে শেল / এসকিউএল স্ক্রিপ্ট সরবরাহ করতে পারেন যা পরের বুটের জন্য সার্ভারটি কনফিগার করে (যা ডিবি প্রারম্ভিকরণের পরে অবিলম্বে হবে, বা পরের বার আপনি ধারক বুট করবেন)।

উদাহরণ:

conf.sql ফাইল:

ALTER SYSTEM SET max_connections = 6;
ALTER SYSTEM RESET shared_buffers;

Dockerfile ফাইল:

FROM posgres:9.6-alpine
COPY *.sql /docker-entrypoint-initdb.d/
RUN chmod a+r /docker-entrypoint-initdb.d/*

এবং তারপরে আপনাকে conf.sqlইতিমধ্যে বিদ্যমান ডাটাবেসে ম্যানুয়ালি কার্যকর করতে হবে । কনফিগারেশনটি ভলিউমে সংরক্ষিত থাকায় এটি পুনর্নির্মাণে টিকে থাকবে।


আর একটি বিকল্প হ'ল আপনার ইচ্ছামত -cপতাকাটি পাস করা :

docker container run -d postgres -c max_connections=6 -c log_lock_waits=on

এইভাবে আপনার কোনও নতুন চিত্র তৈরি করার দরকার নেই এবং আপনার ইতিমধ্যে বিদ্যমান বা ডেটাবেসগুলি সম্পর্কে যত্ন নেওয়ার প্রয়োজন নেই; সমস্ত প্রভাবিত হবে।


4
এই শেষটি, পাস-সি, আমার প্রিয়। এটি বিভিন্ন পরিবেশের জন্য উত্পন্ন করার জন্য এত পরিষ্কার এবং সাধারণ।
এপিক_ফিল

10

আপনি আপনার কাস্টমটি postgresql.confধারকটির অভ্যন্তরে একটি অস্থায়ী ফাইলে রাখতে পারেন এবং রানটাইমের সময় ডিফল্ট কনফিগারেশনটি ওভাররাইট করতে পারেন।

এটা করতে :

  • postgresql.confআপনার ধারক ভিতরে আপনার কাস্টম অনুলিপি করুন
  • updateConfig.shফাইলটি অনুলিপি করুন/docker-entrypoint-initdb.d/

Dockerfile

FROM postgres:9.6

COPY postgresql.conf      /tmp/postgresql.conf
COPY updateConfig.sh      /docker-entrypoint-initdb.d/_updateConfig.sh

updateConfig.sh

#!/usr/bin/env bash

cat /tmp/postgresql.conf > /var/lib/postgresql/data/postgresql.conf

রানটাইমের সময়, /docker-entrypoint-initdb.d/ধারকটি ভিতরে স্ক্রিপ্টটি সম্পাদন করে এবং আপনার নিজস্ব কাস্টম দিয়ে ডিফল্ট কনফিগারেশন ওভাররাইট করে।


দ্বিতীয় কপি কমান্ডের "_" কেন? এটা হওয়া উচিত : /docker-entrypoint-initdb.d/updateConfig.sh?
ফার্নান্দো ক্যাসিটেলা ওসপিনা

4
এর কারণ ডকার-এন্ট্রিপয়েন্ট-initdb.d / ফোল্ডার বর্ণানুক্রমিকভাবে স্ক্রিপ্টগুলি কার্যকর করে। এবং আমি অন্যদের আগে এই স্ক্রিপ্টটি প্রয়োগ করতে চাই।
আলফায়াক্স

tnx আমি ভুলে গিয়েছিলাম যে অনুলিপিটি ব্যবহার করার জন্য অনুলিপিটি ফাইলটির পুনরায় নামকরণ করেছে
ফার্নান্দো ক্যাসিটেলা ওসপিনা

10

আমি সমস্ত উত্তর দেখেছি এবং অন্য একটি বিকল্প বাকি আছে। আপনি ডোকর ফাইলে আপনার সিএমডি মান পরিবর্তন করতে পারেন (এটি সর্বোত্তম নয়, তবে এখনও আপনার লক্ষ্য অর্জনের সম্ভাব্য উপায়)।

মূলত আমাদের প্রয়োজন

  • ডকার পাত্রে কনফিগারেশন ফাইলটি অনুলিপি করুন
  • ওভাররাইড পোস্টগ্রেস শুরুর বিকল্পগুলি

ডকার ফাইলের উদাহরণ:

FROM postgres:9.6
USER postgres

# Copy postgres config file into container
COPY postgresql.conf /etc/postgresql

# Override default postgres config file
CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]

যদিও আমি মনে করি command: postgres -c config_file=/etc/postgresql/postgresql.confআপনার ম্যাথিয়াস ব্রাউনdocker-compose.yml দ্বারা প্রস্তাবিত ফাইলটি ব্যবহার করা সেরা বিকল্প।


2

এই সমস্যার একটি মোটামুটি কম প্রযুক্তির সমাধান বলে মনে হচ্ছে যে পরিষেবাটি (আমি এডাব্লুএস এবং একটি ইয়ামল ফাইলের উপর ঝাঁক ব্যবহার করছি) আপনার ডাটাবেস ফাইলগুলি একটি অবিচ্ছিন্ন ভলিউমে মাউন্ট করা আছে (এখানে এডাব্লুএস ইএফএস ক্লাউডস্টোর দ্বারা বর্ণিত: আউস ড্রাইভার স্পেসিফিকেশন)।

  version: '3.3'
  services:
    database:
      image: postgres:latest
      volumes:
        - postgresql:/var/lib/postgresql
        - postgresql_data:/var/lib/postgresql/data
    volumes:
       postgresql:
         driver: "cloudstor:aws" 
       postgresql_data:
         driver: "cloudstor:aws"
  1. চিত্রটি ডিফল্ট সেটিংসের সাহায্যে ডিবি শুরু হিসাবে আসে।
  2. আপনি কনটেইনারটির ভিতরে কনফিডের সেটিংস সম্পাদনা করুন, উদাহরণস্বরূপ যদি আপনি পুনরায় চালু করার জন্য প্রয়োজনীয় সংখ্যার সর্বাধিক সংখ্যার বৃদ্ধি করতে চান
  3. চলমান ধারক বন্ধ করুন (বা পরিষেবাটি শূন্যের নিচে স্কেল করুন এবং তারপরে একটিতে ফিরে যান)
  4. ঝাঁকুনি একটি নতুন ধারক তৈরি করে, যা এই মুহুর্তে আপনার অবিচ্ছিন্ন কনফিগারেশন সেটিংস তুলে নিয়ে যায় এবং আনন্দের সাথে এগুলি প্রয়োগ করে।

আপনার কনফিগারেশন অব্যাহত রাখার একটি মনোরম পার্শ্ব-প্রতিক্রিয়া হ'ল এটি আপনার ডাটাবেসগুলিকেও বহাল রাখে (বা এটি অন্য উপায়ে ছিল) ;-)


2

আমার সমাধান হ'ল সহকর্মীদের জন্য যাদের ডকার-এন্ট্রিপয়েন্ট-initdb.d চালু করার আগে কনফিগারেশনে পরিবর্তন করা দরকার

আমার 'শেয়ারড_প্রিলোড_লাইব্রিজি' সেটিংস পরিবর্তন করার দরকার ছিল যাতে কাজের সময় পোস্টগ্রাগুলিতে ইতিমধ্যে নতুন লাইব্রেরি প্রিললোড করা থাকে এবং ডকার-এন্ট্রিপয়েন্ট-initdb.d কোডটি এটি ব্যবহার করতে পারে।

সুতরাং আমি স্রেফ postgresql.conf. নমুনা ফাইলটি ডকফাইফিলে প্যাচ করেছি:

RUN echo "shared_preload_libraries='citus,pg_cron'" >> /usr/share/postgresql/postgresql.conf.sample
RUN echo "cron.database_name='newbie'" >> /usr/share/postgresql/postgresql.conf.sample

এবং এই প্যাচটির সাহায্যে ডকার-এন্ট্রিপয়েন্ট-initdb.d /: এসকিএল ফাইলটিতে এক্সটেনশন যুক্ত করা সম্ভব হয়েছে:

CREATE EXTENSION pg_cron;

2

এটি আমার পক্ষে কাজ করে:

FROM postgres:9.6
USER postgres

# Copy postgres config file into container
COPY postgresql.conf /etc/postgresql

# Override default postgres config file
CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]

এটি কেন কোনও উপকার পেল না? এটা এখানে খুব সান্নিধ্যের প্রস্তাব ... ধন্যবাদ।
পাফলো

0

ডকার রচনা ব্যবহার করে আপনি একটি ভলিউম মাউন্ট করতে পারেন postgresql.auto.conf। উদাহরণ:

version: '2'

services:
  db:
    image: postgres:10.9-alpine
    volumes:
      - postgres:/var/lib/postgresql/data:z
      - ./docker/postgres/postgresql.auto.conf:/var/lib/postgresql/data/postgresql.auto.conf
    ports:
      - 5432:5432

postgresql.auto.confওভাররাইট করা হিসাবে আপনার এডিট করা উচিত নয় । postgresql.confএকই জায়গায় ব্যবহার করুন ।
বাশডল

0

আমি অফিশিয়াল ইমেজও ব্যবহার করছিলাম ( FROM postgres) এবং আমি নিম্নলিখিত কমান্ডগুলি সম্পাদন করে কনফিগারটি পরিবর্তন করতে সক্ষম হয়েছি।

প্রথম জিনিসটি পোস্টগ্রাইএসকিউএল কনফিগারেশন ফাইলটি সনাক্ত করা। আপনার চলমান ডাটাবেসে এই কমান্ডটি কার্যকর করে এটি করা যেতে পারে।

SHOW config_file;

আমি আমার ক্ষেত্রে এটি ফিরে /data/postgres/postgresql.conf

পরবর্তী পদক্ষেপটি হল আপনার চলমান পোস্টগ্রিসকিউএল ডোকার ধারকটির হ্যাশ কী।

docker ps -a

এটি চলমান সমস্ত পাত্রে একটি তালিকা ফিরে আসে। আমার ক্ষেত্রে এটি দেখতে এমন দেখাচ্ছে।

...
0ba35e5427d9    postgres    "docker-entrypoint.s…" ....
...

এখন আপনাকে সম্পাদন করে আপনার ধারকটির অভ্যন্তরে ব্যাশে যেতে হবে:

docker exec -it 0ba35e5427d9 /bin/bash

কনটেইনারটি ভিতরে সঠিকভাবে কনফিগার করা আছে কিনা তা পরীক্ষা করে দেখুন।

cat /data/postgres/postgresql.conf

আমি সর্বোচ্চ সংযোগগুলি 100 থেকে 1000 এবং ভাগযুক্ত বাফারটি 128 এমবি থেকে 3 জিবিতে পরিবর্তন করতে চেয়েছিলাম। সেড কমান্ডের সাহায্যে আমি একটি অনুসন্ধান করতে পারি এবং কনফিগারেশনের সাথে সম্পর্কিত ভেরিয়েবলগুলি প্রতিস্থাপন করতে পারি।

sed -i -e"s/^max_connections = 100.*$/max_connections = 1000/" /data/postgres/postgresql.conf
sed -i -e"s/^shared_buffers = 128MB.*$/shared_buffers = 3GB/" /data/postgres/postgresql.conf

আমাদের শেষ কাজটি হ'ল কনটেইনারটির মধ্যে ডাটাবেস পুনরায় চালু করা। আপনি পোস্টগ্রিজের কোন সংস্করণ ব্যবহার করছেন তা সন্ধান করুন।

cd /usr/lib/postgresql/
ls 

আমার ক্ষেত্রে এটি 12 এখন আপনার সঠিক সংস্করণ সহ সঠিক কমান্ড প্রয়োগ করে ডাটাবেস পুনরায় আরম্ভ করতে পারেন।

su - postgres -c "PGDATA=$PGDATA /usr/lib/postgresql/12/bin/pg_ctl -w restart"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.