【发布时间】:2020-04-25 11:48:31
【问题描述】:
我有一个 bash 文件,应该让 postgres docker 容器联机,然后运行 .sql 文件来创建数据库。但它抛出了错误。
psql: error: provision-db.sql: No such file or directory
我已经检查了路径,并且文件存在于这个 bash 脚本的同一级别。以下是我的 bash 文件的内容。
#!/usr/bin/env bash
docker-compose up -d db
# Ensure the Postgres server is online and usable
until docker exec -i boohoo.postgres pg_isready --host="${POSTGRES_HOST}" --username="${POSTGRES_USER}"
do
echo "."
sleep 1
done
docker exec -i boohoo.postgres psql -h "${POSTGRES_HOST}" -U "${POSTGRES_USER}" -a -q -f provision-db.sql
这是provision-db.sql 文件。
DROP DATABASE "boo-hoo";
CREATE DATABASE "boo-hoo";
GRANT ALL PRIVILEGES ON DATABASE "boo-hoo" TO postgres;
这是docker-compose.yml的部分
version: '3.3'
services:
db:
container_name: boohoo.postgres
hostname: postgres.boohoo
image: postgres
ports:
- "15432:5432"
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"
【问题讨论】:
-
文件如何进入容器?你可以在不需要
docker exec的情况下从主机运行psql吗? -
cat provision-db.sql | docker exec -i boohoo.postgres psql -h "${POSTGRES_HOST}" -U "${POSTGRES_USER}" -a -q -f -应该可以解决问题,因为provision-db.sql在您的主机上而不是在您的容器中。 -
@ckaserer 当我尝试这个时它不允许我在提示时输入数据库密码并给我
FATAL: password authentication failed for user -
@DavidMaze 如果我直接从 bash 脚本运行 psql 它将如何连接到容器数据库?
-
使用
-h 127.0.0.1指向当前主机,并通过docker-compose.yml文件中ports:行中的第一个端口号。
标签: bash postgresql docker