![](/img/trans.png)
[英]Cannot connect to Postgresql running in docker with Host = localhost
[英]server and postgresql cannot connect when both running on Docker `getaddrinfo ENOTFOUND`
使用 docker compose 文件(如下)创建 docker 容器后,我调用
$ docker run myApp
但是,我得到
Error: getaddrinfo ENOTFOUND main_db
这仅在服务器和 postgresql 都在 docker 容器中时发生(我能够连接到本地主机上的 postgresql)
我正在使用 TypeOrm 运行 NestJS 应用程序以连接到 postgresql 服务器
在它启动连接的app.module.ts
内,我的配置应该与我的 docker postgresql 配置相匹配。 host
指向我在main_db
上创建的容器,我将其声明为我的服务器( main
服务)的依赖项。 一切都应该在同一个网络webnet
。:
TypeOrmModule.forRoot({
type: 'postgres',
host: 'main_db',
port: +process.env.POSTGRES_PORT,
username: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DB,
autoLoadEntities: true,
synchronize: true,
logging: dbLogging,
}),
docker-compose.yml
version: '3.7'
services:
main:
container_name: main
build:
context: .
target: development
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
ports:
- ${SERVER_PORT}:${SERVER_PORT}
- 9229:9229
command: npm run start:dev
env_file:
- .env
networks:
- webnet
depends_on:
- main_db
main_db:
container_name: main_db
image: postgres:12
restart: always
networks:
- webnet
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
PG_DATA: /var/lib/postgresql/data
ports:
- '${POSTGRES_PORT}:${POSTGRES_PORT}'
volumes:
- pgdata:/var/lib/postgresql/data
networks:
webnet:
volumes:
pgdata:
.env
文件
POSTGRES_PORT=5432
POSTGRES_USER=test
POSTGRES_PASSWORD=test
POSTGRES_DB=test
SERVER_PORT=3001
当创建一个Dockerfile
和一个Dockerfile
docker-compose.yml
文件并且你为在Dockerfile
定义的应用程序调用docker-compose.yml
docker run myApp
而不是调用Dockerfile
docker-compose up
,你会看到应用程序正在运行; 但是,它不会启动docker-compose
文件中定义的容器。 在 NestJS 服务器的情况下,它正在运行服务器,但找不到带有数据库的容器,因为这个容器没有被启动。 虽然在应用程序设置之间的区别Dockerfile
,并在容器的定义docker-compose.yml
是明确的,我不知道该docker
命令并没有提及该docker-compose.yml
。 因此,在这里发布以防其他人有类似的困惑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.