Как отладить постоянное монтирование тома данных для контейнера Docker Odoo? - PullRequest
0 голосов
/ 14 января 2019

Я следовал стандартным инструкциям контейнера Odoo на Docker , чтобы запустить необходимые серверы postgres и odoo, и попытался передать каталоги хостов в качестве постоянного хранилища данных для обоих, как указано в этих инструкциях:

sudo mkdir /tmp/postgres /tmp/odoo
sudo docker run -d -v /tmp/postgres:/var/lib/postgresql/data/pgdata -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:10
sudo docker run -v /tmp/odoo:/var/lib/odoo -p 8069:8069 --name odoo --link db:db -t odoo

Контейнер Odoo показывает сообщения, что он нормально запускается, но когда я указываю своему веб-браузеру на http://localhost:8069, я не получаю ответа от сервера. Напротив, если я опускаю аргумент -v в команде запуска Odoo Docker, мой веб-браузер нормально подключается к серверу Odoo, и все прекрасно работает.

Я искал и видел, как другие люди также пытаются получить информацию о работе постоянных томов данных, например, Разработка Odoo на Docker , Обнаружены ошибки при запуске проекта

Это кажется существенным пробелом в стандартном сценарии использования Docker, когда пользователям нужна более подробная информация о том, как отлаживать:

  • Как отладить, почему монтирование тома хоста не работает для контейнера odoo, тогда как оно явно работает для контейнера postgres? Я не получаю никакой информации от сообщений журнала.

  • В частности, как отладить, если для контейнера требуется, чтобы том данных хоста был предварительно сконфигурирован каким-либо особым образом для работы? Например, тот факт, что я могу заставить контейнер работать без опции -v, кажется, должен быть полезным, но также и непрозрачным. Как я могу использовать этот успех, чтобы проверить, каковы эти требования на самом деле?

Предполагается, что Docker поможет вам запустить полезный сервис, не зная внутренностей его внутренних функций, например, как настроить свой внутренний каталог данных. Ключевой частью этого является подключение постоянного объема данных с хоста, например, так что пользователи могут делать снимки, создавать резервные копии и восстанавливать свои данные с помощью уже известных им инструментов.

1 Ответ

0 голосов
/ 14 января 2019

Я нашел несколько хороших методов отладки, которые и решили эту проблему, и, как представляется, в целом полезны для выяснения проблем с постоянным объемом данных в Docker.

Тест 1: может ли контейнер работать с пустым томом Docker?

Это действительно простой тест: просто создайте новый том Docker и передайте его в аргументе -v (вместо абсолютного пути к каталогу хоста):

sudo docker volume create hello
sudo docker run -v hello:/var/lib/odoo -p 8069:8069 --name odoo --link db:db -t odoo

Таким образом, контейнер odoo сразу сработал успешно (т.е. мой веб-браузер смог подключиться к серверу Odoo). Это показало, что он может нормально работать с (изначально) пустым каталогом данных. Тогда очевидный вопрос заключается в том, почему он не работает с пустым томом каталога хоста. Я читал, что контейнеры Docker могут быть внимательны к владению UID / GID, поэтому мой следующий вопрос состоял в том, как мне выяснить, что он ожидает.

Тест 2: проверка файловой системы работающего контейнера

Я использовал docker exec для получения интерактивной оболочки bash в работающем контейнере:

sudo docker exec -ti odoo bash

Внутри этой оболочки я посмотрел на владельца каталога данных, чтобы получить числовые значения UID и GID:

ls -dn /var/lib/odoo

Это показало, что значения UID / GID были 101: 101. (Вы можете выйти из этой оболочки, просто набрав Control-D)

Тест 3: повторно запустить контейнер с соответствующим UID-каталогом хоста: GID

Затем я изменил владельца каталога хоста на 101: 101 и повторно запустил контейнер odoo с моим монтированием каталога хоста:

sudo chown 101:101 /tmp/odoo
sudo docker stop odoo
sudo docker rm odoo
sudo docker run -v /tmp/odoo:/var/lib/odoo -p 8069:8069 --name odoo --link db:db -t odoo

Успех! Наконец, контейнер odoo работал правильно с монтированием host-directory. Хотя в документации по докеру Odoo ничего не говорится об этом, отладку легко выполнить, если вы знаете, как использовать эти базовые тесты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...