Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql docker compose,多个数据库,从shell执行postgres sql文件_Postgresql_Docker_Shell_Docker Compose - Fatal编程技术网

Postgresql docker compose,多个数据库,从shell执行postgres sql文件

Postgresql docker compose,多个数据库,从shell执行postgres sql文件,postgresql,docker,shell,docker-compose,Postgresql,Docker,Shell,Docker Compose,我正在使用docker compose创建多个postgres数据库,我能够创建它们,但我还需要在每个数据库上执行一个sql文件,我在create-multiple-postgresql-databases.sh文件中使用了“\I db/app.sql”,但启动docker compose时会显示此错误 db/app.sql: No such file or directory 这是文件结构: ├── dbscripts │   └── postgres │   └── db │

我正在使用docker compose创建多个postgres数据库,我能够创建它们,但我还需要在每个数据库上执行一个sql文件,我在create-multiple-postgresql-databases.sh文件中使用了“\I db/app.sql”,但启动docker compose时会显示此错误

db/app.sql: No such file or directory
这是文件结构:

├── dbscripts
│   └── postgres
│       └── db
│           └── app.sql
├── docker-compose.yml
这是我的docker-compose.yml

version: '3'
services:
  postgres-service:
    image: postgres:latest
    container_name: postgres-container
    ports:
      - 55432:5432/tcp
    volumes:
      - /var/lib/postgres
      - ./dbscripts/postgres:/docker-entrypoint-initdb.d
    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_MULTIPLE_DATABASES: app,app_test
      POSTGRES_HOST_AUTH_METHOD: trust
创建-multiple-postgresql-databases.sh

#!/bin/bash

set -e
set -u

function create_user_and_database() {
    local database=$1
    echo "  Creating user and database '$database'"
    psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
        CREATE USER $database;
        CREATE DATABASE $database;
        GRANT ALL PRIVILEGES ON DATABASE $database TO $database;
        \connect $database;
        \i db/app.sql;
EOSQL
}

if [ -n "$POSTGRES_MULTIPLE_DATABASES" ]; then
    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
#/bin/bash
set-e
set-u
函数create_user_和_database(){
本地数据库=$1
echo“正在创建用户和数据库“$database”

psql-v ON_ERROR_STOP=1——用户名“$POSTGRES_USER”找到db/app.sql文件了吗?可能是相对路径关闭了?@Ruchi是的,实际上是路径问题,正确的是docker-entrypoint-initdb.d/db/app.sql