我在 Docker 方面的技能很少。我正在使用適用于 Windows 版本 4.9.1 (81317) 的 Docker 桌面(此時的最新版本)。我的網路應用是多租戶系統,需要 3 個資料庫。這是我的docker-compose.yml(運行 1 個資料庫好)
version: '2.1'
services:
postgres:
image: postgres
ports:
- "5433:5432"
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: acc_spring
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d acc_spring"]
interval: 10s
timeout: 5s
retries: 3
請指導我如何撰寫/修改上述內容docker-composite.yml以同時運行 3 個資料庫:
tenant_master:埠5432,資料庫名稱:tenant_master,用戶名postgres,密碼postgres。tenant_1:埠5432,資料庫名稱:tenant_1,用戶名postgres,密碼postgres。tenant_2:埠5432,資料庫名稱:tenant_2,用戶名postgres,密碼postgres。
注意:一個資料庫實體/服務器中有 3 個資料庫。
還請為我解釋什么/如何/何時使用重新啟動:always,我還有其他選擇always嗎?
uj5u.com熱心網友回復:
除了埠映射(5433似乎錯誤)之外,您不需要更改任何內容(嗯 - 可能管理員密碼在生產中不應該是“postgres”)。
您需要連接到此實體并創建資料庫(SQL 或某些應用程式)和用戶。這與 Docker 或docker compose. POSTGRES_DB只是默認資料庫(不是資料庫)。
但是,如果您想將此作為容器設定的一部分,您可以按如下方式進行。使用這些檔案創建一個新的專案目錄:
檔案create-databases.sh
#!/bin/bash
set -eu
function create_database() {
local database=$1
echo " Creating database '$database'"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE DATABASE $database;
GRANT ALL PRIVILEGES ON DATABASE $database TO $POSTGRES_USER;
EOSQL
}
create_database $POSTGRES_DB2
create_database $POSTGRES_DB3
檔案docker-compose.yml
services:
postgres:
image: postgres:latest
container_name: postgres
ports:
- "5433:5432"
restart: unless-stopped
volumes:
- ./create-databases.sh:/docker-entrypoint-initdb.d/create-databases.sh
- ./db_persist:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: tenant_master
POSTGRES_DB2: tenant_1
POSTGRES_DB3: tenant_2
雖然這不是最佳實踐(我不是 Postgres 用戶),但它可以幫助您入門。通過使用卷,初始化腳本被放入一個檔案夾中,容器初始化將在該檔案夾中提取該腳本,并將資料庫持久化,以防萬一。為了更清楚,我省略了健康檢查。當然可以重新添加。
話雖如此,還有另一種解決方案:只需復制 postgres 服務(postgres2、postgres3)以用于不同的埠(5434、5435)。盡管這將運行 3 個獨立的資料庫實體(需要更多資源),但它也可能有其優勢。
關于重啟策略:你可能會考慮“除非停止”(參見https://docs.docker.com/engine/reference/run/#restart-policies---restart)而不是“總是”在我上面的建議中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/492784.html
標籤:PostgreSQL 码头工人 码头工人撰写
上一篇:Regexp_replace行為會改變,如果它用空白字串或null替換字串陣列中的字串
下一篇:根據另一列計數不同
