2016-06-19 2 views
0

Как я могу визуализировать базу данных из postgres докера: контейнер 9.6? Запуск контейнера без объема докеры прекрасен. Запуск контейнера с томом докеров, отображаемым в папку хоста, удаляет базу данных и конфигурацию. Я понимаю, что это правильное поведение докеров, папка хоста монтируется поверх папки контейнера. Как мне обойти эту проблему и сопоставить созданный в контейнере db, запускаемый в папку моего хоста, чтобы он был доступен, когда следующий контейнер запускается?Как сохранить начальный бит в контейнере докера

Не уверен, что я делаю неправильно здесь.

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 ..   

Приведенный в карту привод на хосте имеет папку данных, созданную, но пустую!

[[email protected] 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 
[[email protected] 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 (я на окнах) Я не потерять данные. Таким образом, может возникнуть проблема между Docker, сопоставляющим папку с папкой, сопоставленной с Vagrant. Предположил, что каталоги, созданные контейнером postgres (когда они не сопоставляются с общей папкой Vagrant) на хосте docker, имеют нечетные разрешения (владельцы и группа).

[[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-bus-proxy. Может ли группа и владелец созданной контейнера папки препятствовать правильной сопоставлению папки с помощью Docker или Vagrant?

+0

Запустите «id 999» в вашем бродячем экземпляре, скорее всего, он вернется с помощью пользователя systemd-bus-proxy. Это проблема с хост-адресами и uid, они часто принадлежат разным пользователям на хосте и внутри контейнера. Именованный том скрывает эту проблему. – BMitch

ответ

0

Это изображение инициализирует данные без проблем для меня, просто убедитесь, что объем монтирование перезаписывает контейнер:

$ 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 

Edit: из ваших дополнений, я вижу, вы используете тома хоста на докер, который работает внутри Бродячей VM и отображения, том для общего ресурса, который затем сопоставляется с хостом Windows. Глядя на this github thread, существует довольно распространенная и старая проблема, вызванная запуском механизма докеров, прежде чем виртуальная машина сопоставляет общие файловые системы. Перезапуск движка докеров внутри виртуальной машины должен решить проблему.

+0

Логически. Должна быть проблема с тем, как объем докеры отображается на хост. – AgentCormac

+0

Обновлен до последней версии с тем же результатом пустой папки. Поэтому я попробовал ваше предложение, запустив хост-докер, перезапустив службу докеров на докере-хосте, а затем создав контейнер. с пустым контейнером. – AgentCormac

Смежные вопросы