首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何定制带有非默认数据库名、用户名和密码的包含odoo应用程序和postgresql的docker-组合?

如何定制带有非默认数据库名、用户名和密码的包含odoo应用程序和postgresql的docker-组合?
EN

Stack Overflow用户
提问于 2022-09-18 16:30:23
回答 1查看 220关注 0票数 0

我有一个应用程序(odoo,但我的问题可能是任何应用程序,我不知道)和数据库默认名称,用户和密码。所有的启动与对接-撰写。对于这些默认值,它工作得很好(我只复制/粘贴了相关内容):

代码语言:javascript
运行
复制
  db:
    image: postgres:14
    user: root
    environment:
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo
      - POSTGRES_DB=postgres
  volumes:
      - ./postgresql:/var/lib/postgresql/data
  web:
    image: odoo:15
    user: root
    depends_on:
      - db
    environment:
      - HOST=db
      - USER=odoo
      - PASSWORD=odoo
  volumes:
      - ./etc:/etc/odoo
      - ./odoo-data:/var/lib/odoo

还有一个需要更新的配置文件etc/odoo.conf (这里是默认值):

代码语言:javascript
运行
复制
db_name = postgres
db_user = odoo
db_password = odoo

例如,如果我将密码设置为123,用户名设置为my,数据库名称设置为mydb,删除容器并取消./postgresql以重新启动clean,则从数据库主机获得以下错误:

代码语言:javascript
运行
复制
odoo-db-1   | 2022-09-18 15:08:17.420 UTC [908] FATAL:  password authentication failed for user "my"
odoo-db-1   | 2022-09-18 15:08:17.420 UTC [908] DETAIL:  Role "my" does not exist.

当然,我已经用我的值更新了和odoo.conf文件。

,我还能错过什么呢?,我在这点上的调查失败了。

这是我的停靠-撰写文件:

代码语言:javascript
运行
复制
version: '2'
services:
  db:
    image: postgres:14
    user: root
    environment:
      - POSTGRES_DB_FILE=/run/secrets/postgresql_db
      - POSTGRES_USER_FILE=/run/secrets/postgresql_user
      - POSTGRES_PASSWORD_FILE=/run/secrets/postgresql_password
    restart: always             # run as a service
    volumes:
        - ./postgresql:/var/lib/postgresql/data
    secrets:
      - postgresql_user
      - postgresql_password
      - postgresql_db

  web:
    image: odoo:15
    user: root
    depends_on:
      - db
    ports:
      - "10013:8069"
      - "20013:8072" # live chat
    tty: true
    command: --
    environment:
      - HOST=db
      - USER_FILE=/run/secrets/postgresql_user
      - PASSWORD_FILE=/run/secrets/postgresql_password
    volumes:
      - /etc/timezone:/etc/timezone:fr
      - /etc/localtime:/etc/localtime:fr
      - ./addons:/mnt/extra-addons
      - ./etc:/etc/odoo
      - ./odoo-data:/var/lib/odoo
    secrets:
      - postgresql_user
      - postgresql_password
    restart: always             # run as a service

secrets:
  postgresql_db:
    file: odoo_pg_db
  postgresql_user:
    file: odoo_pg_user
  postgresql_password:
    file: odoo_pg_pass

这是我的etc/odoo.conf

代码语言:javascript
运行
复制
[options]
addons_path = /mnt/extra-addons
data_dir = /etc/odoo
admin_passwd = "my_own_admin_password"
logfile = /etc/odoo/odoo-server.log
db_name = my_db
db_user = myself
db_password = "my_db_user_password"
dev_mode = reload

The entrypoint.sh

代码语言:javascript
运行
复制
#!/bin/bash

set -e

# 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'}}}

# install python packages
pip3 install pip --upgrade
pip3 install -r /etc/odoo/requirements.txt

# sed -i 's|raise werkzeug.exceptions.BadRequest(msg)|self.jsonrequest = {}|g' /usr/lib/python3/dist-packages/odoo/http.py

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

exit 1

和:

代码语言:javascript
运行
复制
cat odoo_pg_db
my_db
cat odoo_pg_user
myself
cat odoo_pg_pass
my_db_user_password

以及我的项目文件夹树:

代码语言:javascript
运行
复制
.
├── addons
│   └── readme.md
├── docker-compose.yml
├── entrypoint.sh
├── etc
│   ├── addons
│   │   └── 15.0
│   ├── odoo.conf
│   ├── odoo.conf.meld
│   ├── odoo-server.log
│   ├── requirements.txt
│   └── sessions
├── odoo-data
├── odoo_pg_db
├── odoo_pg_pass
├── odoo_pg_user
├── postgresql [error opening dir]
├── README.md
├── run.sh
└── screenshots
    ├── odoo-13-apps-screenshot.png
    ├── odoo-13-sales-form.png
    ├── odoo-13-sales-screen.png
    └── odoo-13-welcome-screenshot.png

odoo:15个码头文件不包括硬写的数据库名称,也不包括关于数据库的用户,只有一个应用程序用户设置为odoo,但这是针对web应用程序的。它使用的配置文件具有默认的数据库名、用户和密码,如上面所示,但我为修改后的配置文件提供了我的值。停靠文件使用ENV来引用它:ENV ODOO_RC /etc/odoo/odoo.conf。然后运行包含以下内容的入口点

代码语言:javascript
运行
复制
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"

使用这些check_config,它从配置文件中获取我的值。

postgres:14个dockerfile只包含带有useradd设置的超级用户名postgres。

注意:当然,在这之后还有更多的工作要做,比如替换根用户,使用Docker机密,但这是另一个主题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-18 17:13:39

当容器被删除时,postgresql文件夹内容没有在sudo rm -fr postgresql/*中被抑制,因为它是用odoo用户创建的。我以前得做sudo chmod -R 777 postgresql

现在,我可以在docker控制台中看到正确设置了环境变量。现在还有其他问题,但这个问题已经解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73764522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档