我正在搭建一个简单的后端,使用Postgres数据库执行CRUD操作,并希望在运行docker-compose up时自动创建数据库和迁移。
我已经尝试将以下代码添加到Dockerfile或entrypoint.sh中,但它们都没有起作用。
createdb --host=localhost -p 5432 --username=postgres --no-password pg_development
createdb db:migrate
此代码仅在完全启动Docker后单独运行时有效。
我已尝试将- ./db-init:/docker-entrypoint-initdb.d
添加到卷中,但也不起作用。
这是Dockerfile。FROM node:10.12.0
# Create app directory
RUN mkdir -p /restify-pg
WORKDIR /restify-pg
EXPOSE 1337
ENTRYPOINT [ "./entrypoint.sh" ]
这是我的docker-compose.yml
version: '3'
services:
db:
image: "postgres:11.2"
ports:
- "5432:5432"
volumes:
- ./pgData:/var/lib/psotgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD:
POSTGRES_DB: pg_development
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- .:/restify-pg
environment:
DB_HOST: db
entrypoint.sh(在这里我得到了createdb: command not found
)
#!/bin/bash
cd app
createdb --host=localhost -p 5432 --username=postgres --no-password pg_development
sequelize db:migrate
npm install
npm run dev
我期望在运行 Docker 时,迁移和数据库创建会自动发生。
npx sequelize db:migrate
工作得非常好,但我仍然无法创建 pg_development 数据库。同时npx sequelize db:migrate
报错说找不到 pg_development 数据库。 - Ashkandocker-compose up
时,请仔细阅读日志以了解正在发生的情况。如果 postgres 容器在初始化时创建数据库,则应看到db_1 | CREATE DATABASE
。另一个尝试的方法是将npx sequelize db:create
添加到entrypoint.sh
中(您可能需要从db
容器中删除POSTGRES_DB: pg_development
环境变量)。 - Artem Titkov