使用 docker compose 或 docker run 的 Odoo 和 postgres 多实例

问题描述 投票:0回答:1

使用 dockercompose 或 docker run,我尝试在 8069 上使用 odoo17 运行容器 1,连接到容器 postgres1,暴露端口 5432,并在 8070 上使用 odoo17 运行容器 2,连接到容器 postgres1,使用不同的用户和数据库暴露端口 5433。 这是我的 dockerfile :

version: '3'

services:
  pg_dsko:
    image: postgres:16
    container_name: pg_dsko
    environment:
      POSTGRES_USER: pgu_dsko
      POSTGRES_PASSWORD: kod_dsko
      POSTGRES_DB: db_dsko
    volumes:
      - /opt/boolab/dsko/pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
  pg_bool:
    image: postgres:16
    container_name: pg_bool
    environment:
      POSTGRES_USER: pgu_bool
      POSTGRES_PASSWORD: kod_bool
      POSTGRES_DB: db_bool
    volumes:
      - /opt/boolab/bool/pgdata:/var/lib/postgresql/data
    ports:
      - "5433:5432"
  pg_univ:
    image: postgres:16
    container_name: pg_univ
    environment:
      POSTGRES_USER: pgu_univ
      POSTGRES_PASSWORD: kod_univ
      POSTGRES_DB: db_univ
    volumes:
      - /opt/boolab/univ/pgdata:/var/lib/postgresql/data
    ports:
      - "5434:5432"
  pg_berp:
    image: postgres:16
    container_name: pg_berp
    environment:
      POSTGRES_USER: pgu_berp
      POSTGRES_PASSWORD: kod_berp
      POSTGRES_DB: db_berp
    volumes:
      - /opt/boolab/berp/pgdata:/var/lib/postgresql/data
    ports:
      - "5435:5432"
  odoo_dsko:
    image: odoo:17
    container_name: odoo_dsko
    ports:
      - "8069:8069"
    volumes:
      - /opt/boolab/dsko/odooDir: /var/lib/odoo
      - /opt/boolab/dsko/addons:/mnt/extra-addons
      - /opt/boolab/dsko/customAddons:/mnt/custom-addons
      - /opt/boolab/dsko/odooLogs:/var/log/odoo
    environment:
      ODOO_DATABASE: db_dsko
      ODOO_DBFILTER: db_dsko
      POSTGRES_DB: db_dsko
      POSTGRES_USER: pgu_dsko
      POSTGRES_PASSWORD: kod_dsko
      POSTGRES_HOST: pg_dsko

  odoo_bool:
    image: odoo:17
    container_name: odoo_bool
    ports:
      - "8070:8069"
    volumes:
      - /opt/boolab/bool/odooDir:/var/lib/odoo
      - /opt/boolab/bool/addons:/mnt/extra-addons
      - /opt/boolab/bool/customAddons:/mnt/custom-addons
      - /opt/boolab/bool/ odooLogs:/var/log/odoo
    environment:
      ODOO_DATABASE: db_bool
      ODOO_DBFILTER: db_bool
      POSTGRES_DB: db_bool
      POSTGRES_USER: pgu_bool
      POSTGRES_PASSWORD: kod_bool
      POSTGRES_HOST: pg_bool

  odoo_Univ:
    image: odoo:17
    container_name: odoo_univ
    ports:
      - "8071:8069"
    volumes:
      - /opt/boolab/univ/odooDir: /var/lib/odoo
      - /opt/boolab/univ/addons:/mnt/extra-addons
      - /opt/boolab/univ/customAddons:/mnt/custom-addons
      - /opt/boolab/univ/odooLogs:/var/log/odoo
    environment:
      ODOO_DATABASE: db_univ
      ODOO_DBFILTER: db_univ
      POSTGRES_DB: db_univ
      POSTGRES_USER: pgu_univ
      POSTGRES_PASSWORD: kod_univ
      POSTGRES_HOST: pg_univ
odoo_berp:
    image: odoo:17
    container_name: odoo_berp
    ports:
      - "8070:8069"
    volumes:
      - /opt/boolab/berp/odooDir:/var/lib/odoo
      - /opt/boolab/berp/addons:/mnt/extra-addons
      - /opt/boolab/berp/customAddons:/mnt/custom-addons
      - /opt/boolab/berp/odooLogs:/var/log/odoo
    environment:
      ODOO_DATABASE: db_berp
      ODOO_DBFILTER: db_berp
      POSTGRES_DB: db_berp
      POSTGRES_USER: pgu_berp
      POSTGRES_PASSWORD: kod_berp
      POSTGRES_HOST: pg_berp

运行后

docker compose up -d and curl localhost:8069
容器停止运行,是postgres容器和odoo容器的日志:

docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS                      PORTS                                       NAMES
b493e06b77fb   odoo:17       "/entrypoint.sh odoo"    47 seconds ago   Exited (1) 13 seconds ago                                               odoo_berp
06617cb720f7   postgres:16   "docker-entrypoint.s…"   47 seconds ago   Up 43 seconds               0.0.0.0:5433->5432/tcp, :::5433->5432/tcp   pg_bool
7393f34f945e   postgres:16   "docker-entrypoint.s…"   47 seconds ago   Up 41 seconds               0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   pg_dsko
52a2369e2ed7   odoo:17       "/entrypoint.sh odoo"    47 seconds ago   Exited (1) 13 seconds ago                                               odoo_bool
626cfc6b5ce7   postgres:16   "docker-entrypoint.s…"   47 seconds ago   Up 42 seconds               0.0.0.0:5434->5432/tcp, :::5434->5432/tcp   pg_univ
8f74e4f8c606   odoo:17       "/entrypoint.sh odoo"    47 seconds ago   Exited (1) 12 seconds ago                                               odoo_univ
5288f253508c   odoo:17       "/entrypoint.sh odoo"    47 seconds ago   Exited (1) 13 seconds ago                                               odoo_dsko
3607dffe0903   postgres:16   "docker-entrypoint.s…"   47 seconds ago   Up 42 seconds               0.0.0.0:5435->5432/tcp, :::5435->5432/tcp   pg_berp
me@onclouds:~$ docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS                      PORTS                                       NAMES
b493e06b77fb   odoo:17       "/entrypoint.sh odoo"    53 seconds ago   Exited (1) 19 seconds ago                                               odoo_berp
06617cb720f7   postgres:16   "docker-entrypoint.s…"   53 seconds ago   Up 50 seconds               0.0.0.0:5433->5432/tcp, :::5433->5432/tcp   pg_bool
7393f34f945e   postgres:16   "docker-entrypoint.s…"   53 seconds ago   Up 48 seconds               0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   pg_dsko
52a2369e2ed7   odoo:17       "/entrypoint.sh odoo"    53 seconds ago   Exited (1) 19 seconds ago                                               odoo_bool
626cfc6b5ce7   postgres:16   "docker-entrypoint.s…"   53 seconds ago   Up 49 seconds               0.0.0.0:5434->5432/tcp, :::5434->5432/tcp   pg_univ
8f74e4f8c606   odoo:17       "/entrypoint.sh odoo"    53 seconds ago   Exited (1) 18 seconds ago                                               odoo_univ
5288f253508c   odoo:17       "/entrypoint.sh odoo"    53 seconds ago   Exited (1) 20 seconds ago                                               odoo_dsko
3607dffe0903   postgres:16   "docker-entrypoint.s…"   53 seconds ago   Up 48 seconds               0.0.0.0:5435->5432/tcp, :::5435->5432/tcp   pg_berp
me@onclouds:~$ docker logs pg_bool
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Etc/UTC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
syncing data to disk ... ok


Success. You can now start the database server using:

    pg_ctl -D /var/lib/postgresql/data -l logfile start

waiting for server to start....2023-12-12 11:33:09.735 UTC [48] LOG:  starting PostgreSQL 16.1 (Debian 16.1-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2023-12-12 11:33:09.736 UTC [48] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-12-12 11:33:09.739 UTC [51] LOG:  database system was shut down at 2023-12-12 11:33:09 UTC
2023-12-12 11:33:09.745 UTC [48] LOG:  database system is ready to accept connections
 done
server started
CREATE DATABASE


/usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*

2023-12-12 11:33:10.045 UTC [48] LOG:  received fast shutdown request
2023-12-12 11:33:10.046 UTC [48] LOG:  aborting any active transactions
2023-12-12 11:33:10.051 UTC [48] LOG:  background worker "logical replication launcher" (PID 54) exited with exit code 1
waiting for server to shut down....2023-12-12 11:33:10.053 UTC [49] LOG:  shutting down
2023-12-12 11:33:10.053 UTC [49] LOG:  checkpoint starting: shutdown immediate
2023-12-12 11:33:10.097 UTC [49] LOG:  checkpoint complete: wrote 923 buffers (5.6%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.020 s, sync=0.009 s, total=0.045 s; sync files=301, longest=0.002 s, average=0.001 s; distance=4257 kB, estimate=4257 kB; lsn=0/1913070, redo lsn=0/1913070
2023-12-12 11:33:10.106 UTC [48] LOG:  database system is shut down
 done
server stopped

PostgreSQL init process complete; ready for start up.

2023-12-12 11:33:10.183 UTC [1] LOG:  starting PostgreSQL 16.1 (Debian 16.1-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2023-12-12 11:33:10.184 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2023-12-12 11:33:10.184 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2023-12-12 11:33:10.186 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-12-12 11:33:10.193 UTC [64] LOG:  database system was shut down at 2023-12-12 11:33:10 UTC
2023-12-12 11:33:10.198 UTC [1] LOG:  database system is ready to accept connections
me@onclouds:~$ docker logs odoo_berp
Database connection failure: could not translate host name "db" to address: Temporary failure in name resolution

你能帮我吗?

我希望不同的容器在端口、用户、数据库和进程中彼此自由运行。

postgresql docker odoo
1个回答
0
投票

我已在我的系统中分析了您的问题并解决了它:

  • 数据库连接失败:无法将主机名“db”转换为地址:名称解析暂时失败

您的文件中可能需要一些其他修复:

第 54 行:[删除 /var 之前的空格]

- /opt/boolab/dsko/odooDir:/var/lib/odoo

第 75 行:[删除 /var 之前的空格]

- /opt/boolab/bool/odooLogs:/var/log/odoo

第 94 行:[删除 /var 之前的空格]

- /opt/boolab/univ/odooDir:/var/lib/odoo

第 101 行:[修复缩进 - 添加适当的缩进]

  odoo_berp:

更改 odoo 配置中的环境变量(更改 POSTGRES_HOST -> DB_PORT_5432_TCP_ADDR):

DB_PORT_5432_TCP_ADDR: pg_dsko [Line: 64]
DB_PORT_5432_TCP_ADDR: pg_bool [Line: 82]
DB_PORT_5432_TCP_ADDR: pg_univ [Line: 100]
DB_PORT_5432_TCP_ADDR: pg_berp [Line: 117]

问题原因:

  • Odoo docker 使用entrypoint.sh 作为docker 容器中的入口点,您可以在其中看到它需要“DB_PORT_5432_TCP_ADDR”作为参数而不是POSTGRES_HOST 来连接postgresql 容器。
  • 当我们传递错误的环境变量时,它采用“db”作为默认值。
  • 由于 db 容器在您的系统中不可用,因此会抛出错误。

下面是它使用的entrypoint.sh:

#!/bin/bash

set -e

if [ -v PASSWORD_FILE ]; then
    PASSWORD="$(< $PASSWORD_FILE)"
fi

# set the postgres database host, port, user and password according to the environment
# and pass them as arguments to the odoo process if not present in the config file
: ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}}
: ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}}
: ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}}
: ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}}

DB_ARGS=()
function check_config() {
    param="$1"
    value="$2"
    if grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then       
        value=$(grep -E "^\s*\b${param}\b\s*=" "$ODOO_RC" |cut -d " " -f3|sed 's/["\n\r]//g')
    fi;
    DB_ARGS+=("--${param}")
    DB_ARGS+=("${value}")
}
check_config "db_host" "$HOST"
check_config "db_port" "$PORT"
check_config "db_user" "$USER"
check_config "db_password" "$PASSWORD"

case "$1" in
    -- | odoo)
        shift
        if [[ "$1" == "scaffold" ]] ; then
            exec odoo "$@"
        else
            wait-for-psql.py ${DB_ARGS[@]} --timeout=30
            exec odoo "$@" "${DB_ARGS[@]}"
        fi
        ;;
    -*)
        wait-for-psql.py ${DB_ARGS[@]} --timeout=30
        exec odoo "$@" "${DB_ARGS[@]}"
        ;;
    *)
        exec "$@"
esac

更新了 docker-compose.yml 文件:

version: '3'

services:
  pg_dsko:
    image: postgres:16
    container_name: pg_dsko
    environment:
      POSTGRES_USER: pgu_dsko
      POSTGRES_PASSWORD: kod_dsko
      POSTGRES_DB: db_dsko
    volumes:
      - /opt/boolab/dsko/pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
  pg_bool:
    image: postgres:16
    container_name: pg_bool
    environment:
      POSTGRES_USER: pgu_bool
      POSTGRES_PASSWORD: kod_bool
      POSTGRES_DB: db_bool
    volumes:
      - /opt/boolab/bool/pgdata:/var/lib/postgresql/data
    ports:
      - "5433:5432"
  pg_univ:
    image: postgres:16
    container_name: pg_univ
    environment:
      POSTGRES_USER: pgu_univ
      POSTGRES_PASSWORD: kod_univ
      POSTGRES_DB: db_univ
    volumes:
      - /opt/boolab/univ/pgdata:/var/lib/postgresql/data
    ports:
      - "5434:5432"
  pg_berp:
    image: postgres:16
    container_name: pg_berp
    environment:
      POSTGRES_USER: pgu_berp
      POSTGRES_PASSWORD: kod_berp
      POSTGRES_DB: db_berp
    volumes:
      - /opt/boolab/berp/pgdata:/var/lib/postgresql/data
    ports:
      - "5435:5432"
  odoo_dsko:
    image: odoo:17
    container_name: odoo_dsko
    ports:
      - "8069:8069"
    volumes:
      - /opt/boolab/dsko/odooDir:/var/lib/odoo
      - /opt/boolab/dsko/addons:/mnt/extra-addons
      - /opt/boolab/dsko/customAddons:/mnt/custom-addons
      - /opt/boolab/dsko/odooLogs:/var/log/odoo
    environment:
      ODOO_DATABASE: db_dsko
      ODOO_DBFILTER: db_dsko
      POSTGRES_DB: db_dsko
      POSTGRES_USER: pgu_dsko
      POSTGRES_PASSWORD: kod_dsko
      DB_PORT_5432_TCP_ADDR: pg_dsko

  odoo_bool:
    image: odoo:17
    container_name: odoo_bool
    ports:
      - "8070:8069"
    volumes:
      - /opt/boolab/bool/odooDir:/var/lib/odoo
      - /opt/boolab/bool/addons:/mnt/extra-addons
      - /opt/boolab/bool/customAddons:/mnt/custom-addons
      - /opt/boolab/bool/odooLogs:/var/log/odoo
    environment:
      ODOO_DATABASE: db_bool
      ODOO_DBFILTER: db_bool
      POSTGRES_DB: db_bool
      POSTGRES_USER: pgu_bool
      POSTGRES_PASSWORD: kod_bool
      DB_PORT_5432_TCP_ADDR: pg_bool

  odoo_Univ:
    image: odoo:17
    container_name: odoo_univ
    ports:
      - "8071:8069"
    volumes:
      - /opt/boolab/univ/odooDir:/var/lib/odoo
      - /opt/boolab/univ/addons:/mnt/extra-addons
      - /opt/boolab/univ/customAddons:/mnt/custom-addons
      - /opt/boolab/univ/odooLogs:/var/log/odoo
    environment:
      ODOO_DATABASE: db_univ
      ODOO_DBFILTER: db_univ
      POSTGRES_DB: db_univ
      POSTGRES_USER: pgu_univ
      POSTGRES_PASSWORD: kod_univ
      DB_PORT_5432_TCP_ADDR: pg_univ
  odoo_berp:
    image: odoo:17
    container_name: odoo_berp
    ports:
      - "8070:8069"
    volumes:
      - /opt/boolab/berp/odooDir:/var/lib/odoo
      - /opt/boolab/berp/addons:/mnt/extra-addons
      - /opt/boolab/berp/customAddons:/mnt/custom-addons
      - /opt/boolab/berp/odooLogs:/var/log/odoo
    environment:
      ODOO_DATABASE: db_berp
      ODOO_DBFILTER: db_berp
      POSTGRES_DB: db_berp
      POSTGRES_USER: pgu_berp
      POSTGRES_PASSWORD: kod_berp
      DB_PORT_5432_TCP_ADDR: pg_berp
© www.soinside.com 2019 - 2024. All rights reserved.