[英]How to persist initial db in a docker container
如何從docker postgres:9.6容器中外部化數據庫? 在沒有docker卷的情況下啟動容器就可以了。 使用映射到主機文件夾的Docker卷啟動容器會刪除數據庫和配置。 我了解這是正確的docker volumee行為,主機文件夾安裝在容器文件夾的頂部。 如何解決此問題並將容器啟動時創建的數據庫映射到我的主機文件夾,以便下次啟動容器時可以使用它?
不知道我在做什么錯。
docker run --name test-postgres \
-e POSTGRES_PASSWORD=test123 \
-v /home/vagrant/workspace/shared-data/postgres:/var/lib/postgresql \
-d postgres:9.6
這將旋轉容器並按預期創建數據庫。 容器結果:
root@fe0e5751c98d:/var/lib/postgresql# ls -al data
total 0
drwxr-xr-x. 2 root root 6 Jun 20 12:32 .
drwxr-xr-x. 3 postgres postgres 17 Jun 20 12:32 ..
主機上的映射驅動器已創建了數據文件夾,但它為空!
[vagrant@localhost postgres]$ ls -al
total 1
drwxrwxrwx. 1 vagrant vagrant 0 Jun 20 12:27 .
drwxrwxrwx. 1 vagrant vagrant 0 Jun 18 09:33 ..
-rwxrwxrwx. 1 vagrant vagrant 5 Jun 19 21:47 container.txt
drwxrwxrwx. 1 vagrant vagrant 0 Jun 20 12:27 data
-rwxrwxrwx. 1 vagrant vagrant 0 Jun 20 12:24 dockerhost.txt
[vagrant@localhost postgres]$ ls -al data
total 0
drwxrwxrwx. 1 vagrant vagrant 0 Jun 20 12:27 .
drwxrwxrwx. 1 vagrant vagrant 0 Jun 20 12:27 ..
但是,如果我映射到Vagrant未映射的文件夾(我在Windows上),則不會丟失數據。 因此,似乎Docker將文件夾映射到Vagrant映射的文件夾之間可能存在問題。組)。
[vagrant@localhost ~]$ ls -al
total 20
drwx------. 4 vagrant vagrant 4096 Jun 23 17:51 .
drwxr-xr-x. 3 root root 20 May 21 20:07 ..
-rw-r--r--. 1 vagrant vagrant 18 Nov 20 2015 .bash_logout
-rw-r--r--. 1 vagrant vagrant 193 Nov 20 2015 .bash_profile
-rw-r--r--. 1 vagrant vagrant 231 Nov 20 2015 .bashrc
drwx------. 2 vagrant root 28 Jun 23 17:47 .ssh
-rw-r--r--. 1 vagrant vagrant 6 May 21 13:07 .vbox_version
drwxr-xr-x. 4 vagrant vagrant 39 Jun 23 18:01 workspace
[vagrant@localhost ~]$ ls -al workspace/
total 4
drwxr-xr-x. 4 vagrant vagrant 39 Jun 23 18:01 .
drwx------. 4 vagrant vagrant 4096 Jun 23 17:51 ..
drwxr-xr-x. 3 root root 17 Jun 23 18:01 postgres
drwxr-xr-x. 5 vagrant vagrant 46 Jun 23 17:51 shared-data
[vagrant@localhost ~]$ ls -al workspace/postgres/
total 4
drwxr-xr-x. 3 root root 17 Jun 23 18:01 .
drwxr-xr-x. 4 vagrant vagrant 39 Jun 23 18:01 ..
drwx------. 19 systemd-bus-proxy root 4096 Jun 23 18:01 data
[vagrant@localhost ~]$ ls -al workspace/postgres/data
ls: cannot open directory workspace/postgres/data: Permission denied
[vagrant@localhost ~]$ sudo ls -al workspace/postgres/data
postgres數據目錄已由systemd-bus-proxy創建。 容器創建的文件夾的組和所有者可能會阻止該文件夾被Docker或Vagrant正確映射嗎?
該映像對我來說初始化數據沒有問題,只需確保您安裝的卷可被容器寫入:
$ mkdir data
$ ls -al data/
total 8
drwxr-xr-x 2 bmitch bmitch 4096 Jun 19 19:30 .
drwxr-xr-x 3 bmitch bmitch 4096 Jun 19 19:30 ..
$ chmod 777 data
$ docker run --name test-postgres \
-e POSTGRES_PASSWORD=test123 \
-v `pwd`/data:/var/lib/postgresql/data \
-d postgres:9.6
$ sudo ls -al data
[sudo] password for bmitch:
total 128
drwx------ 19 999 bmitch 4096 Jun 19 19:32 .
drwxr-xr-x 3 bmitch bmitch 4096 Jun 19 19:30 ..
drwx------ 5 999 docker 4096 Jun 19 19:32 base
drwx------ 2 999 docker 4096 Jun 19 19:33 global
...
請注意,uid 999在容器內部。 命名卷避免了uid映射和chmod到世界可寫部分:
$ docker run --name test-postgres \
-e POSTGRES_PASSWORD=test123 \
-v postgres-data:/var/lib/postgresql/data \
-d postgres:9.6
編輯:從添加的內容中,我看到您正在docker上使用主機卷,該主機卷在Vagrant VM內運行,並將該卷映射到共享,然后將其映射到Windows主機。 看着這個github線程,有一個相當普遍和古老的問題,是由Docker引擎在VM映射共享文件系統之前啟動而引起的。 在虛擬機內部重新啟動docker引擎應該可以解決它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.