使用 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
你能帮我吗?
我希望不同的容器在端口、用户、数据库和进程中彼此自由运行。
我已在我的系统中分析了您的问题并解决了它:
您的文件中可能需要一些其他修复:
第 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]
问题原因:
下面是它使用的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