Postgresql 如何从docker容器内部正确执行odoo外壳?
我正在尝试使用docker容器中的shell和odoo,我遇到了一些问题 我通过docker compose设置本地环境,更准确地说,我在一个网络中运行odoo和PostgreSQL,但当我想为odoo shell指定db时,它不起作用 这是我的docker-compose.yaml:Postgresql 如何从docker容器内部正确执行odoo外壳?,postgresql,docker,docker-compose,odoo,odoo-13,Postgresql,Docker,Docker Compose,Odoo,Odoo 13,我正在尝试使用docker容器中的shell和odoo,我遇到了一些问题 我通过docker compose设置本地环境,更准确地说,我在一个网络中运行odoo和PostgreSQL,但当我想为odoo shell指定db时,它不起作用 这是我的docker-compose.yaml: version: '3' services: db: image: postgres:10 ports: - '5432:5432' environment: -
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:
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(非常简单):
odoo实例本身工作正常,因此odoo必须能够连接到数据库。但当我尝试像这样执行shell时:
docker exec -it odoo_odoo_1 bash -c "odoo shell -d postgres"
我有一个例外(为了可读性,跟踪未满):
你知道我为什么不能连接到数据库吗?Odoo
shell
需要以与使用docker容器启动时相同的配置运行,/etc/Odoo/Odoo.conf
。基本上,使用此命令odoo shell-d postgres
可以运行没有任何配置的odoo shell实例,并且选择odoo应用程序数据库作为postgres
,将其更改为以下内容
docker exec -it odoo_odoo_1 bash -c "odoo shell -c /etc/odoo/odoo.conf -d ODOO_DATABASE_NAME"
如果启用调试模式,Odoo数据库名称将显示在右上角括号内用户名部分的正后方
编写自定义Dockerfile解决了这个问题(出于其他原因,我编写了自己的Dockerfile,但它确实解决了我与odoo shell的问题)。 如果有人面临我的问题,这里是我当地的环境: 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:
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
data_dir = /var/lib/odoo
debug_mode = True
; db_host = db
; db_port = 5432
; db_user = odoo
; db_password = odoo
; db_name = postgres
[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
requirements.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'
docker compose根据yaml配置创建多个docker容器,一个运行Odoo,另一个运行Posgresql,等等,实际上它们是具有不同ip地址的不同机器。因此,启动命令:
docker exec -it odoo_odoo_1 bash -c "odoo shell -d postgres"
odoo将尝试连接到引用localhost的postgres,在本例中,localhost是运行odoo的容器,但不是postgres。
如果指定参数--db_host和--db_password,则应该可以使用:
docker-compose exec odoo odoo shell -d <DB-NAME-CREATED-WITH-ODOO> --db_host db --db_password odoo
运行docker compose:
docker-compose up -d
连接到localhost:8069并创建名为“my test DB”的新数据库,然后使用以下命令登录到shell:
docker-compose exec web odoo shell -d my-test-db --db_host mydb --db_password myodoo```
它不是这样工作的
docker exec-It-odoo\u-odoo\u 1 bash-c“odoo-c/etc/odoo/odoo.conf shell-d test”
给出了`用法:odoo[options]odoo:error:无法识别的参数:'shell',docker exec-It-odoo\u-odoo\u-bash-c“odoo shell-c/etc/odoo/odoo/odoo.conf-d test”
给出了相同的错误它给出了与postgres套接字相同的错误。我到底需要写什么来代替“ODOO_DATABASE_NAME”?您试图用“test”登录到shell的数据库名称是我的数据库名称,您的答案并没有解决问题。不过谢谢你的关注。
docker-compose.yaml:
version: '2'
services:
web:
image: odoo:12.0
depends_on:
- mydb
ports:
- "8069:8069"
environment:
- HOST=mydb
- USER=odoo
- PASSWORD=myodoo
mydb:
image: postgres:10
environment:
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=myodoo
- POSTGRES_USER=odoo
docker-compose up -d
docker-compose exec web odoo shell -d my-test-db --db_host mydb --db_password myodoo```