无法在Docker中运行脚本以创建多个数据库

时间:2019-09-18 18:21:52

标签: postgresql macos docker docker-compose

我正在尝试在一个容器中创建多个数据库。我正在关注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命令。有人可以帮忙解决什么问题吗?

1 个答案:

答案 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脚本在启动期间将被忽略