Docker Compose 无法连接到数据库
Posted
技术标签:
【中文标题】Docker Compose 无法连接到数据库【英文标题】:Docker Compose cannot connect to database 【发布时间】:2018-12-21 04:04:13 【问题描述】:我在后端使用nestjs,并使用typeorm 作为ORM。 我试图在 docker-compose 文件中定义我的数据库和我的应用程序。
如果我将数据库作为容器运行,而我的应用程序从本地计算机运行,它运行良好。我的程序连接并创建表等。
但如果我尝试从容器内连接数据库或使用 docker-compose up 启动容器,则会失败。
总是收到 ECONNREFUSED 错误。
我的错误在哪里?
docker-compose.yml
version: '3.1'
volumes:
dbdata:
services:
db:
image: postgres:10
volumes:
- ./dbData/:/var/lib/postgresql/data
restart: always
environment:
- POSTGRES_PASSWORD=$TYPEORM_PASSWORD
- POSTGRES_USER=$TYPEORM_USERNAME
- POSTGRES_DB=$TYPEORM_DATABASE
ports:
- $TYPEORM_PORT:5432
backend:
build: .
ports:
- "3001:3000"
command: npm run start
volumes:
- .:/src
Dockerfile
FROM node:10.5
WORKDIR /home
# Bundle app source
COPY . /home
# Install app dependencies
#RUN npm install -g nodemon
# If you are building your code for production
# RUN npm install --only=production
RUN npm i -g @nestjs/cli
RUN npm install
EXPOSE 3000
.env
# .env
HOST=localhost
PORT=3000
NODE_ENV=development
LOG_LEVEL=debug
TYPEORM_CONNECTION=postgres
TYPEORM_HOST=localhost
TYPEORM_USERNAME=postgres
TYPEORM_PASSWORD=postgres
TYPEORM_DATABASE=mariokart
TYPEORM_PORT=5432
TYPEORM_SYNCHRONIZE=true
TYPEORM_DROP_SCHEMA=true
TYPEORM_LOGGING=all
TYPEORM_ENTITIES=src/database/entity/*.ts
TYPEORM_MIGRATIONS=src/database/migrations/**/*.ts
TYPEORM_SUBSCRIBERS=src/database/subscribers/**/*.ts
我尝试使用链接,但它在容器中不起作用。
【问题讨论】:
【参考方案1】:查看backend
容器中的/etc/hosts
。你会看到
192.0.18.1 dir_db_1
或类似的东西。 IP 将不同,dir
将代表您所在的目录。因此,您必须将TYPEORM_HOST=localhost
更改为TYPEORM_HOST=dir_db_1
。
不过,我建议您为容器设置静态名称。
services:
db:
container_name: project_db
...
backend:
container_name: project_backend
在这种情况下,您始终可以确定您的容器将有一个静态名称,并且您可以设置 TYPEORM_HOST=project_db
,并且再也不用担心名称了。
【讨论】:
以上是关于Docker Compose 无法连接到数据库的主要内容,如果未能解决你的问题,请参考以下文章
Docker-Compose 无法连接到 Docker 守护进程
Docker compose api无法连接到主机MongoDB数据库
docker-compose 有两个容器:web 无法连接到 db
构建 docker-compose 映像时无法连接到 MySQL
Docker Compose (docker-compose) 无法连接到 Windows Server 2016 TP5 上的 docker 守护进程