docker-compose 多容器报错集
1. Nest.js+Mysql 数据库连接失败
报错提示:
first-nest-first-nest-1 | [Nest] 1 - 11/10/2023, 1:57:08 AM ERROR [ExceptionHandler] connect ECONNREFUSED 127.0.0.1:3306
first-nest-first-nest-1 | Error: connect ECONNREFUSED 127.0.0.1:3306
first-nest-first-nest-1 | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1595:16)
first-nest-first-nest-1 exited with code 1
docker-compose.yml配置
version: '3'
services:
mysql:
image: mysql:5.7
# container_name: first-nest-mysql #自定义容器的名称
volumes: #挂载当前的data目录到容器默认mysql存储目录
- ./deploy/mysql/db:/var/lib/mysql
- ./deploy/mysql/mysqld:/var/run/mysqld
environment: #环境变量
- MYSQL_ROOT_PASSWORD=123456 #mysql的root密码
- MYSQL_DATABASE=love_koa_docker #mysql的初始化数据库
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
ports:
- "3305:3306"
#docker 重启后,容器自启动
restart: always
networks:
- app-network
first-nest:
depends_on:
- mysql
build:
context: ./
dockerfile: Dockerfile
ports:
- "3000:3000"
# restart: always
# restart: on-failure # 设置自动重启,这一步必须设置,主要是存在mysql还没有启动完成就启动了node服务
networks:
- app-network
networks:
app-network:
driver: bridge
数据库连接配置
{
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: '123456',
database: 'love_koa_docker',
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
synchronize: true,
// logging: true,
}
docker-commpose.yml的mysql将主机的3305
端口映射到容器的3306
端口,你可以从外部访问localhost:3307
。但是,这并不意味着集装箱正在聆听3307
; 这个容器其实还在听3306
。 当其他容器试图访问mysql
DNS时,它将被转换为内部容器IP,因此您必须连接到3306
。
建议将mysql的本地3306端口映射到容器3306端口。
数据库连接配置中的host也改成mysql容器的名称。