【发布时间】:2021-08-10 05:56:41
【问题描述】:
这可能有点混乱,所以我将相应地讨论我的整个设置并描述我的目标。
我正在使用 Node.js/Express 开发一个 API。我已经集成了 docker,因此当任何人尝试运行应用程序时,他们只需要运行命令 docker compose up
命令的设置方式是通过dockerfile + docker-compose.yml
docker-compose.yml 包含以下内容
version: '3.4'
services:
db:
image: postgres
environment:
POSTGRES_PASSWORD: password
POSTGRES_USER: postgres
POSTGRES_DB: mainDB
volumes:
- ./pgdata:/var/lib/postgresql/data
ports:
- '5432:5432'
api:
image: api
depends_on:
- db
build:
context: .
dockerfile: ./Dockerfile
environment:
NODE_ENV: production
ports:
- 3000:3000
volumes:
- .:/usr/src/app
这会将 docker 容器设置为同时运行 api 和数据库,但是当我尝试连接到数据库时会出现问题。
我有一个包含以下内容的 sql 文件
DROP TABLE IF EXISTS fruits;
CREATE TABLE fruits (
fruitID INTEGER primary key,
fruitName VARCHAR(255) NOT NULL,
fruitColor VARCHAR(255),
);
我目前无法通过 pgAdmin 连接到数据库,我得到的错误是我引用的数据库名称不存在(“mainDB”)。当我通过终端进入 psql 时,它也没有显示数据库的存在。
我的总体困惑是:我该如何设置,以便在执行命令 docker compose up 时,用户能够同时运行 api 和数据库,同时在数据库中创建表?
这可行吗?从我在教程中看到的是,人们拥有这些 sql 文件,只需将命令复制并粘贴到 psql 命令行中。如果我必须从我的 psql 命令行手动构建数据库,那么在 docker-compose.yml 文件中运行数据库有什么意义?
【问题讨论】:
标签: node.js postgresql docker docker-compose