我正在尝试在一个容器中创建多个数据库。我正在关注link
由于某种原因,我看不到为我运行的initdb shell脚本
docker-compose看起来像
postgres:
image: postgres:alpine
container_name: postgres
environment:
POSTGRES_DB: employee
POSTGRES_MULTIPLE_DATABASES: employee_test
POSTGRES_USER: test
POSTGRES_PASSWORD: test
volumes:
- "./initdb.sh:/docker-entrypoint-initdb.d/initdb.sh"
- "./.docker_pgdata:/var/lib/postgresql/data"
ports:
- "5432:5432"
我以POSTGRES_MULTIPLE_DATABASES开头:employee,employee_test,但我收到一个错误,指出已经创建了employee数据库。
shell脚本
function create_user_and_database() {
local database=$1
echo " Creating user and database '$database'"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$database"<<-EOSQL
CREATE DATABASE $database;
GRANT ALL PRIVILEGES ON DATABASE $database TO $POSTGRES_USER;
EOSQL
}
if [ -n "$POSTGRES_MULTIPLE_DATABASES" ]; then
PGPASSWORD=$POSTGRES_PASSWORD
echo "Multiple database creation requested: $POSTGRES_MULTIPLE_DATABASES"
for db in $(echo $POSTGRES_MULTIPLE_DATABASES | tr ',' ' '); do
create_user_and_database $db
done
echo "Multiple databases created"
fi
当我直接运行脚本时,它抱怨
Creating user and database 'employee_test'
psql: FATAL: database "employee_test" does not exist
不确定,是否运行create database命令。有人可以帮忙解决什么问题吗?
答案 0 :(得分:0)
安装备份卷时,它将不运行数据库创建的init
脚本。
所以您有两个选择
init
脚本。如果您查看entrypoint或docker日志,则会看到
Recreating postgres ...
WARNING: Service "postgres" is using volume "/var/lib/postgresql/data" from the previous container. Host mapping.....
因此,由于备份量大,init脚本在启动期间将被忽略