BAR*_*OWL 4 postgresql docker docker-compose
使用sequelize作为orm后端对节点postgres数据库进行docker化时出现以下错误
未处理的拒绝 SequelizeConnectionRefusedError:连接 ECONNREFUSED 127.0.0.1:5432 app_1 | 在connection.connect.err(/home/app/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:170:24)
这些代码行似乎是罪魁祸首,docker 不应该连接这些凭据,因为这是我本地的。
if (process.env.NODE_ENV === "production") {
var sequelize = new Sequelize(process.env.DATABASE_URL);
} else {
// docker is looking at these credentials..... when it should not
var sequelize = new Sequelize("elifullstack", "eli", "", {
host: "127.0.0.1",
dialect: "postgres",
pool: {
max: 100,
min: 0,
idle: 200000,
// @note https://github.com/sequelize/sequelize/issues/8133#issuecomment-359993057
acquire: 1000000,
},
});
}
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
# docker-compose.yml
version: "3"
services:
app:
build: ./server
depends_on:
- database
ports:
- 5000:5000
environment:
# database refers to the database server at the bottom called "database"
- PSQL_HOST=database
- PSQL_USER=postgres
- PORT=5000
- PSQL_NAME=elitypescript
command: npm run server
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:
Run Code Online (Sandbox Code Playgroud)
./服务器/docker文件
FROM node:10.6.0
COPY . /home/app
WORKDIR /home/app
COPY package.json ./
RUN npm install
EXPOSE 5000
Run Code Online (Sandbox Code Playgroud)
我查看了其他类似的问题,如下所示,但最终并没有帮助解决问题。
Docker - SequelizeConnectionRefusedError:连接 ECONNREFUSED 127.0.0.1:3306
SequelizeConnectionRefusedError:连接ECONNREFUSED 127.0.0.1:3306
我解决了...
我所做的是改变这个
host: "127.0.0.1",
Run Code Online (Sandbox Code Playgroud)
对此
let sequelize;
if (process.env.NODE_ENV === "production") {
sequelize = new Sequelize(process.env.DATABASE_URL);
} else {
sequelize = new Sequelize(
process.env.POSTGRES_DB || "elitypescript",
process.env.POSTGRES_USER || "eli",
"",
{
host: process.env.PSQL_HOST || "localhost",
dialect: "postgres",
pool: {
max: 100,
min: 0,
idle: 200000,
// @note https://github.com/sequelize/sequelize/issues/8133#issuecomment-359993057
acquire: 1000000,
},
}
);
}
Run Code Online (Sandbox Code Playgroud)
这样主机将被设置为 docker 环境变量,如下所示
PSQL_HOST: database
Run Code Online (Sandbox Code Playgroud)
这连接到
database:
image: postgres:9.6.8-alpine
volumes:
- database:/var/lib/postgresql/data
ports:
- 3030:5432
Run Code Online (Sandbox Code Playgroud)
编辑
# 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}
command: npm run server
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:
Run Code Online (Sandbox Code Playgroud)
更新:
上述解决方案可能不适用于大多数遇到此问题的人。
但是需要考虑一些事情
改变:
127.0.0.1 到 CONTAINER_NAME(例如数据库)
| 归档时间: |
|
| 查看次数: |
22537 次 |
| 最近记录: |