如何从docker postgres:9.6容器中对数据库进行外部化?在没有码头容器的情况下启动容器很好。使用映射到主机文件夹的docker卷启动容器将清除数据库和配置。我知道这是正确的docker volumee行为,主机文件夹安装在容器文件夹的顶部。 如何解决此问题并将在容器上创建的数据库映射到我的主机文件夹,以便容器下一次启动时可用?如何在Docker容器中保存初始数据块
不知道我在做什么错在这里。
docker run --name test-postgres \
-e POSTGRES_PASSWORD=test123 \
-v /home/vagrant/workspace/shared-data/postgres:/var/lib/postgresql \
-d postgres:9.6
这将旋转容器并按预期创建数据库。容器结果:
[email protected]:/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映射的文件夹(我在Windows上),我不会丢失数据。所以Docker映射文件夹到Vagrant映射文件夹似乎可能存在问题。指出docker主机上由postgres容器创建的目录(当未映射到Vagrant共享文件夹时)具有奇怪的权限(所有者和组)。
[[email protected] ~]$ 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
[[email protected] ~]$ 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
[[email protected] ~]$ 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
[[email protected] ~]$ ls -al workspace/postgres/data
ls: cannot open directory workspace/postgres/data: Permission denied
[[email protected] ~]$ sudo ls -al workspace/postgres/data
Postgres的数据目录已经由systemd总线代理创建。容器组和容器创建文件夹的所有者是否可以阻止Docker或Vagrant正确映射文件夹?
在你的流浪实例中运行一个'id 999',它可能会返回systemd-bus-proxy用户。这是主机映射卷和uid的问题,它们通常属于主机vs容器内的不同用户。一个命名卷隐藏了这个问题。 – BMitch