【发布时间】:2020-08-08 18:53:53
【问题描述】:
我正在尝试在执行 docker-compose up 之前从 sequelize 中播种数据,但我在播种时收到此错误。
错误:连接 ECONNREFUSED 127.0.0.1:5432
这是我使用的命令
docker-compose run --rm app npm run seed
在执行 docker-compose up sequelize 时会同步模型,但我需要在模型同步之前连接到服务器,以便我可以执行诸如播种数据或运行迁移之类的命令。我该怎么办?
我会分享相关代码。
sequelize 如何连接到 db
if (process.env.NODE_ENV === "production") {
var sequelize = new Sequelize(process.env.DATABASE_URL);
} else {
var sequelize = new Sequelize(
process.env.POSTGRES_DB,
process.env.POSTGRES_USER,
"",
{
host: process.env.PSQL_HOST,
dialect: "postgres",
pool: {
max: 100,
min: 0,
idle: 200000,
// @note https://github.com/sequelize/sequelize/issues/8133#issuecomment-359993057
acquire: 1000000,
},
}
);
}
docker-compose.yml
# docker-compose.yml
version: "3"
services:
app:
build: ./server
depends_on:
- database
ports:
- 5000:5000
environment:
PSQL_HOST: database
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_DB: ${POSTGRES_DB:-elitypescript}
entrypoint: ["/bin/bash", "./entrypoint.sh"]
client:
build: ./client
image: react_client
links:
- app
working_dir: /home/node/app/client
volumes:
- ./:/home/node/app
ports:
- 3001:3001
command: npm run start
env_file:
- ./client/.env
database:
image: postgres:9.6.8-alpine
volumes:
- database:/var/lib/postgresql/data
ports:
- 3030:5432
volumes:
database:
.entrypoint.sh
# entrypoint.sh
npm run seed # my attempt to run seed first before server kicks in. but doesn't work
npm run server
app.ts
models.sequelize.sync().then(() => {
httpServer.listen(PORT, () => {
console.log(
"App is running at http://localhost:%d in %s mode",
app.get("port"),
app.get("env")
);
console.log(" Press CTRL-C to stop\n");
});
});
【问题讨论】:
-
您能否在
process.env.DATABASE_URL、process.env.POSTGRES_DB、process.env.POSTGRES_USER中记录这些变量的值。如果我理解正确,您的sequelize没有在与数据库相同的容器中运行。那它为什么要连接到 127.0.0.1 呢? -
抱歉耽搁了。我会进一步调查。但从您的角度来看,设置是否正确?
-
我没有发现任何问题。如果你想用 ORM 初始化数据库,没关系。大多数人都使用 SQL 容器中的启动脚本来执行此操作。请小心并执行一些测试,看看重新部署应用容器时会发生什么,以确保您的数据库不会被擦除。
-
我看到 Neo,我应该在哪里 console.log ?
-
抱歉,新编辑:在
if (process.env.NODE_ENV === "production") {行上方,记录process.env.DATABASE_URL变量
标签: javascript docker docker-compose