docker openerp не может запуститься — остановитесь

Я создал контейнер docker openerp. Первый запуск из браузера хороший, могу либо создать новые базы либо восстановить предыдущие.

Затем я делаю docker stop openerp, а затем docker start openerp. Повторный доступ из браузера больше не работает. Я получаю фоновый интерфейс, но с ошибками openerpserver.

Я попробовал это, используя свои собственные образы докеров, созданные из источников, которые можно найти в github yvnicolas/docker-openerp repo, а также используя репозиторий tinyerp/ubuntu-openerp от Dockerhub с аналогичными эффектами.

Вот трассировка ошибки, которую я получаю:

Client Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/openerp/addons/web/http.py", line 204, in dispatch
    response["result"] = method(self, **self.params)
  File "/usr/lib/pymodules/python2.7/openerp/addons/web/controllers/main.py", line 1427, in load
    action = req.session.model(action_type).read([action_id], False, ctx)
  File "/usr/lib/pymodules/python2.7/openerp/addons/web/session.py", line 42, in proxy
    result = self.proxy.execute_kw(self.session._db, self.session._uid, self.session._password, self.model, method, args, kw)
  File "/usr/lib/pymodules/python2.7/openerp/addons/web/session.py", line 30, in proxy_method
    result = self.session.send(self.service_name, method, *args)
  File "/usr/lib/pymodules/python2.7/openerp/addons/web/session.py", line 103, in send
    raise xmlrpclib.Fault(openerp.tools.ustr(e), formatted_info)


Server Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/openerp/addons/web/session.py", line 89, in send
    return openerp.netsvc.dispatch_rpc(service_name, method, args)
  File "/usr/lib/pymodules/python2.7/openerp/netsvc.py", line 296, in dispatch_rpc
    result = ExportService.getService(service_name).dispatch(method, params)
  File "/usr/lib/pymodules/python2.7/openerp/service/web_services.py", line 626, in dispatch
    res = fn(db, uid, *params)
  File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 190, in execute_kw
    return self.execute(db, uid, obj, method, *args, **kw or {})
  File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 132, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 199, in execute
    res = self.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 187, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 3679, in read
    result = self._read_flat(cr, user, select, fields, context, load)
  File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 3800, in _read_flat
    res2 = self._columns[f].get(cr, self, ids, f, user, context=context, values=res)
  File "/usr/lib/pymodules/python2.7/openerp/osv/fields.py", line 1145, in get
    result = self._fnct(obj, cr, uid, ids, name, self._arg, context)
  File "/usr/lib/pymodules/python2.7/openerp/addons/base/ir/ir_actions.py", line 211, in _search_view
    'search', context=context)
  File "/usr/lib/pymodules/python2.7/openerp/addons/account/account_invoice.py", line 363, in fields_view_get
    res = super(account_invoice,self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu)
  File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 2278, in fields_view_get
    xarch, xfields = self.__view_look_dom_arch(cr, user, result['arch'], view_id, context=ctx)
  File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 1930, in __view_look_dom_arch
    fields = self.fields_get(cr, user, None, context)
  File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 3597, in fields_get
    res_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'field', context['lang'])
  File "/usr/lib/pymodules/python2.7/openerp/tools/cache.py", line 18, in lookup
    r = self.lookup(self2, cr, *args)
  File "/usr/lib/pymodules/python2.7/openerp/tools/cache.py", line 46, in lookup
    value = d[key] = self.method(self2, cr, *args)
  File "/usr/lib/pymodules/python2.7/openerp/addons/base/ir/ir_translation.py", line 336, in _get_source
    (lang or '', types, tools.ustr(name)))
  File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 161, in wrapper
    return f(self, *args, **kwargs)
  File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 226, in execute
    res = self._obj.execute(query, params)
InternalError: current transaction is aborted, commands ignored until end of transaction block

person Yves Nicolas    schedule 07.10.2014    source источник


Ответы (2)


Что, как вы ожидаете, произойдет, когда вы запустите запуск и остановку? Остановка работающего контейнера приведет к потере всех данных в памяти и всех процессов. Вам нужно будет перезапустить все запущенные процессы, например. повторная выдача стартовой CMD/ENTRYPOINT. Но все созданные вами базы данных исчезнут. Если вы хотите сохранить процессы и данные, вы можете попробовать новые команды паузы/возобновления, появившиеся в версии 0.12.0. Это механизм моментального снимка, и он может делать то, что, по вашему мнению, должен делать запуск и остановка.

person seanmcl    schedule 07.10.2014
comment
Я ожидаю того же поведения, что и на выделенной машине, когда я останавливаю/запускаю openerp, останавливая его службу или процессы. Docker, кажется, выполняет довольно хорошую часть работы, так как после остановки и запуска докера кажется, что мой сценарий запуска из моей ENTRYPOINT снова запускается, и нужные процессы как для postgres, так и для openerp запускаются хорошо. Просто кажется, что openerp запутался где-то между веб-интерфейсом и содержимым базы данных. Содержимое базы данных все еще там, поскольку я создал свой кластер postgres внутри тома контейнера данных. - person Yves Nicolas; 07.10.2014

Интересно, происходит ли какое-то сохранение состояния? Вы запускаете свой докер, и он загружает все, но остановка докера сохранит состояние контейнера, а запуск докера перезапустит тот же контейнер, а не создаст новый образ. Если вы сделали docker rm, а затем docker запустили для создания нового контейнера, это сработает?

person Adrian Merrall    schedule 08.10.2014
comment
На самом деле, поскольку вся цель состоит не в том, чтобы каждый раз перезагружать данные, я попробовал ваше предложение сохранить контейнер данных. Если я начну с совершенно нового пустого контейнера данных, это сработает, но мне придется вручную восстанавливать мою базу, а это не то, чего я хочу. Если я запускаю новый контейнер выполнения с существующими данными, у меня возникает та же проблема... - person Yves Nicolas; 08.10.2014