Как правильно выполнить оболочку odoo из контейнера Docker? - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь использовать оболочку внутри docker-контейнера с odoo, и у меня есть некоторые проблемы.

Я настраиваю свою локальную среду с помощью docker-compose, точнее, я запускаю odoo и PostgreSQL в одной сети, но когда я хочу указать db для оболочки odoo, она не работает.

Вот мой docker-compose.yaml:

version: '3'
services:
  db:
    image: postgres:10
    ports:
      - '5432:5432'
    environment:
    - POSTGRES_USER=odoo
    - POSTGRES_PASSWORD=odoo
    - POSTGRES_DB=postgres
    volumes:
    - odoo-db-data:/var/lib/postgresql/data
  odoo:
    depends_on:
    - db
    build: .
    ports:
    - '8069:8069'
    - '8071:8071'
    - '4444:4444'
    volumes:
    - odoo-web-data:/var/lib/odoo
    - ./local_addons/:/mnt/extra-addons/
    - ./odoo.conf:/etc/odoo/odoo.conf
    stdin_open: true
    tty: true

volumes:
  odoo-web-data:
  odoo-db-data:

и Dockerfile (это довольно просто):

FROM odoo:13

USER root
RUN pip3 install remote-pdb pdbpp dateutils xlrd
USER odoo

Сам экземпляр odoo работает просто отлично, поэтому odoo должен иметь возможность подключаться к базе данных. Но когда я пытаюсь выполнить оболочку следующим образом:

docker exec -it odoo_odoo_1 bash -c "odoo shell -d postgres"

у меня возникает это исключение (трассировка не полна для удобства чтения):

2019-10-29 14:37:13,094 72 INFO ? odoo: Odoo version 13.0-20191022 
2019-10-29 14:37:13,095 72 INFO ? odoo: Using configuration file at /etc/odoo/odoo.conf 
2019-10-29 14:37:13,095 72 INFO ? odoo: addons paths: ['/usr/lib/python3/dist-packages/odoo/addons', '/var/lib/odoo/addons/13.0', '/mnt/extra-addons'] 
2019-10-29 14:37:13,095 72 INFO ? odoo: database: default@default:default 
2019-10-29 14:37:13,272 72 INFO ? odoo.addons.base.models.ir_actions_report: Will use the Wkhtmltopdf binary at /usr/local/bin/wkhtmltopdf 
2019-10-29 14:37:13,377 72 INFO ? odoo.service.server: Initiating shutdown 
2019-10-29 14:37:13,377 72 INFO ? odoo.service.server: Hit CTRL-C again or send a second signal to force the shutdown. 
2019-10-29 14:37:13,378 72 INFO ? odoo.sql_db: Connection to the database failed 
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 60, in __new__
    return cls.registries[db_name]
  File "/usr/lib/python3/dist-packages/odoo/tools/func.py", line 69, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/tools/lru.py", line 44, in __getitem__
    a = self.d[obj].me
KeyError: 'postgres'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/odoo", line 8, in <module>
    odoo.cli.main()
  File "/usr/lib/python3/dist-packages/odoo/cli/command.py", line 60, in main
    o.run(args)
.....
  File "/usr/lib/python3/dist-packages/odoo/sql_db.py", line 600, in borrow
    **connection_info)
  File "/usr/lib/python3/dist-packages/psycopg2/__init__.py", line 126, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Я не указываю хост и порт postgresявно (вот мой odoo.conf):

[options]

addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
debug_mode = True

; db_host = db
; db_port = 5432
; db_user = odoo
; db_password = odoo
; db_name = postgres

Есть ли у вас какие-либо мысли, почему я не могу подключиться к базе данных?

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Написание собственного Dockerfile решило проблему (я написал свой собственный Dockerfile по некоторым другим причинам, но он решил мою проблему с оболочкой odoo). Вот мое локальное окружение, если кто-то сталкивается с моими проблемами:

Dockerfile:

FROM debian:buster-slim

# Generate locale C.UTF-8 for postgres and general locale data
ENV LANG C.UTF-8

# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf
RUN set -x; \
        apt-get update \
        && apt-get install -y --no-install-recommends \
            ca-certificates \
            curl \
            dirmngr \
            fonts-noto-cjk \
            gnupg \
            libssl-dev \
            node-less \
            npm \
            unzip \
            gcc \
            python3-dev \
            python3-psycopg2 \
            python3-num2words \
            python3-pip \
            python3-phonenumbers \
            python3-pyldap \
            python3-qrcode \
            python3-renderpm \
            python3-setuptools \
            python3-vobject \
            python3-watchdog \
            python3-xlwt \
            xz-utils \
        && curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb \
        && echo '7e35a63f9db14f93ec7feeb0fce76b30c08f2057 wkhtmltox.deb' | sha1sum -c - \
        && apt-get install -y --no-install-recommends ./wkhtmltox.deb \
        && rm -rf /var/lib/apt/lists/* wkhtmltox.deb

# install latest postgresql-client
RUN set -x; \
        echo 'deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main' > etc/apt/sources.list.d/pgdg.list \
        && export GNUPGHOME="$(mktemp -d)" \
        && repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \
        && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \
        && gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \
        && gpgconf --kill all \
        && rm -rf "$GNUPGHOME" \
        && apt-get update  \
        && apt-get install -y postgresql-client \
        && rm -rf /var/lib/apt/lists/*

# Install rtlcss (on Debian buster)
RUN set -x; \
    npm install -g rtlcss

# Download odoo source from github
RUN adduser --disabled-password --gecos "" odoo \
        && mkdir -p /odoo \
        && chown -R odoo /odoo \
        && curl -LOk https://github.com/OCA/OCB/archive/13.0.zip \
        && unzip 13.0.zip \
        && mv ./OCB-13.0/* /odoo/ \
        && rm -rf ./OCB-13.0 \
        && rm -rf 13.0.zip

COPY ./requirements.txt /
RUN pip3 install -r /requirements.txt

ENV ODOO_RC /etc/odoo/odoo.conf
RUN mkdir -p /var/lib/odoo \
        && mkdir -p /mnt/extra-addons \
        && mkdir -p /etc/odoo \
        && touch /etc/odoo/odoo.conf \
        && chown -R odoo /var/lib/odoo \
        && chown -R odoo /mnt/extra-addons \
        && chown -R odoo /etc/odoo/odoo.conf

USER odoo

CMD ["/odoo/odoo-bin"]

docker-compose.yaml:

version: '3'
services:
  db:
    image: postgres:10
    ports:
      - '5432:5432'
    environment:
    - POSTGRES_USER=odoo
    - POSTGRES_PASSWORD=odoo
    - POSTGRES_DB=postgres
    volumes:
    - odoo-db-data:/var/lib/postgresql/data
  odoo:
    depends_on:
    - db
    build: .
    ports:
    - '8069:8069'
    - '8071:8071'
    - '4444:4444'
    volumes:
    - odoo-web-data:/var/lib/odoo
    - ./local_addons/:/mnt/extra-addons/
    - ./odoo.conf:/etc/odoo/odoo.conf
    stdin_open: true
    tty: true

volumes:
  odoo-web-data:
  odoo-db-data:

odoo.conf:

[options]

addons_path = /mnt/extra-addons,/odoo/addons
data_dir = /var/lib/odoo
debug_mode = True

db_host = db
db_port = 5432
db_user = odoo
db_password = odoo
; db_name = postgres

needs.txt:

Babel==2.3.4
chardet==3.0.4
decorator==4.0.10
docutils==0.12
ebaysdk==2.1.5
feedparser==5.2.1
gevent==1.1.2 ; sys_platform != 'win32' and python_version < '3.7'
gevent==1.3.4 ; sys_platform != 'win32' and python_version >= '3.7'
gevent==1.4.0 ; sys_platform == 'win32' and python_version >= '3.7'
greenlet==0.4.10 ; python_version < '3.7'
greenlet==0.4.13 ; python_version >= '3.7'
html2text==2016.9.19
Jinja2==2.10.1
libsass==0.12.3
lxml==3.7.1 ; sys_platform != 'win32' and python_version < '3.7'
lxml==4.2.3 ; sys_platform != 'win32' and python_version >= '3.7'
lxml ; sys_platform == 'win32'
Mako==1.0.4
MarkupSafe==0.23
mock==2.0.0
num2words==0.5.6
ofxparse==0.16
passlib==1.6.5
Pillow==5.4.1
Pillow==6.1.0 ; sys_platform == 'win32' and python_version >= '3.7'
polib==1.1.0
psutil==4.3.1; sys_platform != 'win32'
psutil==5.6.3; sys_platform == 'win32'
psycopg2==2.7.3.1; sys_platform != 'win32'
psycopg2==2.8.3; sys_platform == 'win32'
pydot==1.2.3
pyldap==2.4.28; sys_platform != 'win32'
pyparsing==2.1.10
PyPDF2==1.26.0
pyserial==3.1.1
python-dateutil==2.5.3
pytz==2016.7
pyusb==1.0.0
qrcode==5.3
reportlab==3.3.0
requests==2.20.0
zeep==3.1.0
vatnumber==1.2
vobject==0.9.3
Werkzeug==0.14.1
XlsxWriter==0.9.3
xlwt==1.3.*
xlrd==1.0.0
pypiwin32 ; sys_platform == 'win32'

Эта среда в основном основана на стандартном образе odoo, но я создаю его из исходного кода github repo.

Я использую оболочкувот так, без указания файла конфигурации odoo:

docker exec -it odoo_odoo_1 bash -c "/odoo/odoo-bin shell -d ODOO_DATABASE_NAME"
0 голосов
/ 29 октября 2019

Odoo shell необходимо запустить с той же конфигурацией, что и для запуска док-контейнера, /etc/odoo/odoo.conf. В основном с помощью этой команды odoo shell -d postgres вы запускаете экземпляр оболочки Odoo без какой-либо конфигурации, а база данных приложения Odoo выбрана как postgres, измените ее на следующее

docker exec -it odoo_odoo_1 bash -c "odoo shell -c /etc/odoo/odoo.conf -d ODOO_DATABASE_NAME"

Если вы включите режим отладки, база данных Odooимя отображается сразу после раздела имени пользователя в верхнем правом углу внутри круглых скобок.

Database name

...