2015-10-17 55 views
3

閱讀這些鏈接:泊塢窗數據卷容器。我似乎無法得到備份

  1. https://docs.docker.com/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes
  2. Backing up data volume containers off machine

我的理解是我可以採取數據量容器和存檔備份。 然而,閱讀第一個鏈接我似乎無法讓它工作。

--volumes-from sonatype-nexus 

都好,跑關係後,我檢查的數據量,我能看到內臟創建,停止和刪除關係:

docker create -v /sonatype-work --name sonatype-work sonatype/nexus /bin/true 

我使用的容器推出Sonatype的/承上啓下圖像並重新開始,保存所有更改。

CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS     NAMES 
f84abb054d2e  sonatype/nexus  "/bin/sh -c 'java -" 22 seconds ago  Up 21 seconds  0.0.0.0:8081->8081/tcp nexus 
1aea2674e482  sonatype/nexus  "/bin/true"    25 seconds ago  Created          sonatype-work 

我想現在備份Sonatype的工作,但沒有運氣。

[[email protected] ~]# pwd 
/root 
[[email protected] ~]# docker run --volumes-from sonatype-work -v $(pwd):/backup ubuntu tar cvf /backup/sonatype-work-backup.tar /sonatype-work 
tar: /backup/sonatype-work-backup.tar: Cannot open: Permission denied 
tar: Error is not recoverable: exiting now 

我試圖運行的-u根,我也試圖與:

/root/sonatype-work-backup.tar 

在這樣做時,我可以看到它去皮的東西,但我沒有看到tar文件。基於這個例子和我的理解,我不認爲這是正確的。

任何人都可以看到我做錯了什麼?

編輯:Linux的版本信息

Fedora release 22 (Twenty Two) 
NAME=Fedora 
VERSION="22 (Twenty Two)" 
ID=fedora 
VERSION_ID=22 
PRETTY_NAME="Fedora 22 (Twenty Two)" 
ANSI_COLOR="0;34" 
CPE_NAME="cpe:/o:fedoraproject:fedora:22" 
HOME_URL="https://fedoraproject.org/" 
BUG_REPORT_URL="https://bugzilla.redhat.com/" 
REDHAT_BUGZILLA_PRODUCT="Fedora" 
REDHAT_BUGZILLA_PRODUCT_VERSION=22 
REDHAT_SUPPORT_PRODUCT="Fedora" 
REDHAT_SUPPORT_PRODUCT_VERSION=22 
PRIVACY_POLICY_URL=https://fedoraproject.org/wiki/Legal:PrivacyPolicy 
VARIANT="Server Edition" 
VARIANT_ID=server 
Fedora release 22 (Twenty Two) 
Fedora release 22 (Twenty Two) 
+0

奇怪的是,這正是我遵循數據量的過程。剛剛嘗試使用這些Nexus容器,它也可以工作。任何與你正在運行的目錄中的權限有什麼不同?如果你使用/ tmp代替,比如'docker run -volumes-from sonatype-work -v/tmp:/ backup ubuntu tar cvf /backup/sonatype-work-backup.tar/sonatype-work'? –

+0

我剛剛在/ tmp中嘗試過同樣的錯誤。它的新鮮安裝fedora22作爲根在/根,我不知道它的(即BLEEPING)selinux? –

+0

這很有可能。嘗試將':Z'添加到'-volumes-from'即'docker run -volumes-from sonatype-work -v $(pwd):/ backup:Z ubuntu tar cvf/backup/sonatype-work-backup .tar/sonatype-work'。另一種選擇是將容器作爲特權運行,即使用'--privileged = true'。 –

回答

3

其原因與selinux標籤有關。有一對夫婦的好項目原子的網頁上這樣的:

Docker and Linux

的密閉容器進程的默認類型是svirt_lxc_net_t。允許這種類型讀取/執行/ usr下的所有文件類型,以及/ etc下的大多數類型。允許svirt_lxc_net_t使用網絡,但不允許讀取/ var,/ home,/ root,/ mnt下的內容...允許svirt_lxc_net_t只寫入標記爲svirt_sandbox_file_t和docker_var_lib_t的文件。容器中的所有文件都默認標記爲svirt_sandbox_file_t。

然後在Using Volumes with Docker can Cause Problems with SELinux

這將標記與精確MCS標籤的容器,該容器將與運行中的內容,基本上它運行chcon -Rt svirt_sandbox_file_t -l s0:c1,c2 /var/db其中S0:C1,C2的不同之每個容器。

(在這種情況下不/var/db/root

如果卷裝入與-v /源的圖像:/目標位:Z泊塢窗會自動重新標記爲您S0的內容。如果您使用Z捲進行卷裝,則標籤將專用於容器,並且不能在容器之間共享。

因此,無論zZ適合在這種情況下,但人們通常可能更Z的隔離。

+1

非常感謝,很好的信息。還要注意那些來到這裏的人。如果您想要將tar文件還原到容器以及遵循docker的指導,這同樣適用:https://docs.docker.com/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes –

0

我越來越不準的原因是因爲SELinux的的。我不確定爲什麼,但是如果我發現,我會編輯這個答案。禁用selinux並重新啓動,我能夠恢復。

+0

我想你可以在'-v'行嘗試':Z'。從1.7版開始,Docker會在使用時添加標籤,請參閱https://github.com/docker/docker/pull/5910 –

+0

我在重新啓動後將selinux重新加入了Z,並且工作正常。如果你想寫一些東西作爲答案,我會將你的標記標記爲已接受。我想更多地瞭解它。謝謝 –