Я нашел несколько хороших методов отладки, которые и решили эту проблему, и, как представляется, в целом полезны для выяснения проблем с постоянным объемом данных в 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 ничего не говорится об этом, отладку легко выполнить, если вы знаете, как использовать эти базовые тесты.