2016-08-24 350 views
0

試圖備份文件時,如何正確指定命名卷我有以下泊塢窗,撰寫文件在泊塢窗

version: '2' 

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

    node: 
    container_name: node 
    build: . 
    links: 
     - postgres:postgres 
    ports: 
     - "8000:8000" 
    depends_on: 
     - postgres 
    command: npm start 

volumes: 
    postgresdata: 

上運行docker volume ls我有

local    42exp_postgresdata 

當試圖通過執行備份:

docker run --rm --volume=42exp_postgresdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /var/lib/postgresql/data 

我得到下面的錯誤:

docker: Error response from daemon: Invalid volume spec "42exp_postgresdata": Invalid volume destination path: '42exp_postgresdata' mount path must be absolute.. 

我不確定我在哪裏出錯,因爲它幾乎是在文檔中指定的確切代碼。我如何正確指定要備份的指定卷?

回答

0

你需要的地方安裝卷:

docker run --rm -v 42exp_postgresdata:/var/lib/postgresql/data -v $(pwd):/backup \ 
    ubuntu tar cvf /backup/backup.tar /var/lib/postgresql/data 

編輯:

注意-v | --volume選項有多種格式。你可以用它來綁定貼裝文件夾從主機到容器:

-v /folder/on/host:/folder/in/container 

貼裝命名卷容器:

-v named-volume:/folder/in/container 

,或者只是爲集裝箱指定一個未命名的卷:

-v /this/folder/in/container/will/be/stored/in/volume 
+0

你是對的 - 它的工作原理。感謝:D。你認爲我的compose.yml是否正常,或者你看到有什麼明顯的錯誤?有大量的教程指定不同的編寫方式。 – Kannaj

+0

我覺得很好。如果您剛剛開始使用docker-compose,請查看Docker的可用模塊http://docs.ansible.com/ansible/list_of_cloud_modules.html#docker它提供了類似的功能,但只要有理由,您可以管理更多的東西。 (我使用ansible,我喜歡它:-) – aceton1k

0

您是否嘗試過使用--volumes-from mycompose_postgres_1(或者您生成的docker映像被調用)?請參閱:https://docs.docker.com/engine/tutorials/dockervolumes/

+0

它看起來像volume-from用於卷容器......我必須使用'--volume = {name}'來命名卷。但它似乎仍然工作 - http://stackoverflow.com/questions/36011595/docker-named-volumes-vs-doc-data-only-containers – Kannaj