2016-08-29 12 views
5

में एक डेटाबेस का उपयोग कर मैं मेरे एप्लिकेशन चल रहा हूँ कर के साथ YML फ़ाइलमैं कैसे बैकअप डोकर

postgres: 
    container_name: postgres 
    image: postgres:${POSTGRES_VERSION} 
    volumes: 
     - postgresdata:/var/lib/postgresql/data 
    expose: 
     - "5432" 
    environment: 
     - POSTGRES_DB=42EXP 
     - POSTGRES_USER=${POSTGRES_USER} 
     - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} 

    node: 
    container_name: node 
    links: 
     - postgres:postgres 
    depends_on: 
     - postgres 

volumes: 
    postgresdata: 

नीचे डोकर-रचना आप यहाँ देख सकते हैं, मैं Postgres राज्य का प्रबंधन करने के लिए एक named volume उपयोग कर रहा हूँ।

सरकारी डॉक्स के अनुसार, मैं बैकअप नीचे

docker run --rm --volumes postgresdata:/var/lib/postgresql/data -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata 

की तरह एक मात्रा कुछ अन्य ट्यूटोरियल सुझाव दिया मैं बैकअप के लिए postgres द्वारा प्रदान की pg-dump फ़ंक्शन का उपयोग कर सकते हैं।

pg_dump -Fc database_name_here > database.bak 

मुझे लगता है कि मुझे इस फ़ंक्शन को निष्पादित करने के लिए पोस्टग्रेस कंटेनर के अंदर जाना होगा और मेजबान में बैकअप निर्देशिका को माउंट करना होगा।

क्या एक दृष्टिकोण दूसरे से बेहतर/बेहतर है?

उत्तर

25

चलाने के लिए pg_dump आप docker exec आदेश का उपयोग कर सकते हैं:

बैकअप करने के लिए:

docker exec -u <your_postgres_user> <postgres_container_name> pg_dump -Fc <database_name_here> > db.dump

डीबी (उत्पादन पर ऐसा मत करो, परीक्षण उद्देश्य के लिए ही छोड़ दें !! !):

docker exec -u <your_postgres_user> <postgres_container_name> psql -c 'DROP DATABASE <your_db_name>'

पुनर्स्थापित करने के लिए:

docker exec -i -u <your_postgres_user> <postgres_container_name> pg_restore -C -d postgres < db.dump

इसके अलावा, आप कार्यकारी के डोकर-लिखें अनुरूप उपयोग कर सकते हैं। उस स्थिति में आप पूर्ण कंटेनर नाम (composeproject_postgres) के बजाय लघु सेवाओं का नाम (पोस्टग्रेस) का उपयोग कर सकते हैं।

docker exec

docker-compose exec

pg_restore

+2

जब मैं डोकर कार्यकारी -u pg_restore -सी -d postgres Andi

+0

मेरा बुरा, आपको डॉकर निष्पादन के लिए - इंटरैक्टिव विकल्प जोड़ना चाहिए। मैंने इसे ठीक करने के लिए मूल उत्तर संपादित किया है। – tck

+0

छोटे टाइपो: एस/डाटाबेस/डाटाबेस/(उत्तर के लिए धन्यवाद ;-) –

संबंधित मुद्दे