我一直在尝试容器化我的React前端、Flask后端和Postgres应用程序,但是我遇到了很多问题,现在的主要问题是我的Postgres模式没有被正确加载。
下面是我的目录结构:
Directory structure.
下面是我的compose.yaml
:
services:
database:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=admin
ports:
- "5432:5432"
volumes:
- data:/var/lib/postgresql/data
- ./database/1-schema.sql:/docker-entrypoint-initdb.d/01-schema.sql
- ./database/2-init.sql:/docker-entrypoint-initdb.d/02-init.sql
volumes:
data:
下面是我的两个SQL脚本:1-schema.sql
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
);
2-init.sql
INSERT INTO users (username) VALUES ("John Doe");
INSERT INTO users (username) VALUES ("Jane Doe");
flask 应用程序的Dockerfile不再工作了,所以我没有麻烦包括它。
下面是我的app.py
:
from flask import Flask
import psycopg2
app = Flask(__name__)
@app.route("/api")
def index():
conn = psycopg2.connect("postgresql://postgres:admin@localhost:5432/postgres")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users;")
result = cursor.fetchone()
conn.commit()
conn.close()
return result
当我运行docker-compose up
时,我收到以下错误消息:psql:/docker-entrypoint-initdb.d/01-schema.sql: error: could not read from input file: Is a directory
exited with code 1
下面是完整的输出:
Output-1Output-2
然后当我试图访问app.py
中的查询结果时,通过转到http://127.0.0.1:5000/api
,我得到一个错误,说关系不存在:
Flask Output
数据库成功接收到查询,但也指出关系不存在:ERROR: relation "users" does not exist at character 15
STATEMENT: SELECT * FROM users;
希望能得到一些指导,说明这里出了什么问题,以及如何将我的Flask后端和Next.js前端容器化。
1条答案
按热度按时间5cg8jx4n1#
罪魁祸首应该是合成文件的以下部分:
正如this other answer还指出的,如果您试图挂载的文件不存在,docker将在容器内创建一个空目录,因此错误消息“is a directory”(是一个目录)。
请验证文件是否存在,路径是否正确,并尝试将相对路径替换为绝对路径。如果这也不起作用,请尝试挂载整个目录,如下所示: