我有一个应用程序(odoo,但我的问题可能是任何应用程序,我不知道)和数据库默认名称,用户和密码。所有的启动与对接-撰写。对于这些默认值,它工作得很好(我只复制/粘贴了相关内容):
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
(这里是默认值):
db_name = postgres
db_user = odoo
db_password = odoo
例如,如果我将密码设置为123,用户名设置为my,数据库名称设置为mydb,删除容器并取消./postgresql
以重新启动clean,则从数据库主机获得以下错误:
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文件。
,我还能错过什么呢?,我在这点上的调查失败了。
这是我的停靠-撰写文件:
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
[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
#!/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
和:
cat odoo_pg_db
my_db
cat odoo_pg_user
myself
cat odoo_pg_pass
my_db_user_password
以及我的项目文件夹树:
.
├── 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
。然后运行包含以下内容的入口点:
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机密,但这是另一个主题。
发布于 2022-09-18 17:13:39
当容器被删除时,postgresql
文件夹内容没有在sudo rm -fr postgresql/*
中被抑制,因为它是用odoo用户创建的。我以前得做sudo chmod -R 777 postgresql
。
现在,我可以在docker控制台中看到正确设置了环境变量。现在还有其他问题,但这个问题已经解决了。
https://stackoverflow.com/questions/73764522
复制相似问题