记录MacOS 10.15版本使用nestjs+mysql+docker-compose部署应用时,nestjs无法连接上数据库,原因是因为ip地址需要改成mysql容器内的ip地址

MacOS 10.15
mysql版本: 8.0.11
node版本:18.19.0

解决方式:
使用docker inspect + mysql容器的地址。 进入容器查看该容器的ip地址。
在这里插入图片描述
nestjs应用中将mysql的连接改为容器内部的地址。这些配置尽量写在配置文件中,我这里为了方便演示直接写死了。

TypeOrmModule.forRoot({
  type: 'mysql',
  host: '172.19.0.2', 
  port: 3306,
  username: 'root',
  password: 'password',
  database: 'db_name',
  autoLoadEntities: true,
  synchronize: true,
  logging: true,
  connectorPackage: 'mysql2',
  extra: {
    authPlugin: 'sha256_password',
  },
});

docker-compse配置

version: '3'
services:
 # 我的nest服务名称
  nest-master:
    image: node:18.19.0
    container_name: 'zz_master'
    # nest项目打包时,用的是他自己目录下的 Dockerfile
    # 依赖于另外两个 service,另外两个 service 会先被构建
    working_dir: /nest-backend-service
    volumes:
      - ./:/nest-backend-service
    command: npm run start:dev
    depends_on:
      - zz-mysql-7
    # 端口映射,左边是宿主机上的端口 7008,也就是你打开浏览器http://localhost:7008 可以访问到 nest 的接口,而在容器内部他是运行在 7007ports:
      - '3000:3000'
    # 失败时重启,有时候 mysql 没启动起来,nest 已经完事了,就会连不上 mysql,所以一直重启,知道 mysql 启动成功
    # 不过你的项目如果有bug,他就会无限重启,所以要自己注意了
    # restart: on-failure
    # 声明他们在zzstudio-server 这个网络中,可以用container_name进行访问
    # 不声明的话,也会在同一个网络中,名称默认是 项目_default, 比如我这个项目叫 zz-nest, 默认的网络名称就是 zz-nest_default
    networks:
      - zzstudio-server
  # 我的 mysql 服务的名称
  zz-mysql-7:
    # 我指定的容器名,当 nest服务(也就是上边的 nest-master)要访问 mysql 时,mysql的 host 就配置为 zz_mysql
    container_name: 'zz_mysql'
    image: mysql:8.0.11
    # 端口映射,当你从外部访问 3307 时会被映射到容器内部的 3306 上。
    # 因为这里我们三个服务在同一个网络下,所以我们prod.env 使用的应该是 3306
    ports:
      - '3307:3306'
    # 挂载的本地目录
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    volumes:
      - /usr/mysql:/var/lib/mysql
      # 可以用于初始化时执行一些 sql,我查阅的野文里,有的用来解决数据库没有被创建,或用来表结构初始化,有需要的自行尝试
      # - ./init.sql/:/docker-entrypoint-initdb.d/init.sql

    # 相关的环境变量,密码应该是必须要设置的,忘了咋回事了
    environment:
      # 如果你的 mysql 是 8.x 不要指定 MYSQL_USER=root,会报错
      # 在指定了MYSQL_DATABASE后,会自动创建这个数据库!
      MYSQL_DATABASE: micro_app 
      MYSQL_ROOT_PASSWORD: A887563$
    # 同样,显式的声明在一个网络下
    networks:
      - zzstudio-server
# 声明网络,和上边所有的 server 下边的 networks 相对应
networks:
  zzstudio-server:
    driver: bridge


此时nestjs服务已经运行正常了
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值