记录部署prisma+nest的问题

135 阅读1分钟

遇到的问题

使用docker-compose部署3个服务实例后,一直拿不到redis

image.png

因为build的时候里面没有.env , 所以读不到配置

需要copy一份过去并且在docker-compose nest配置里面加入

Dockerfile

COPY --from=build-stage /app/.env /app

docker-compose.yml

env_file:
      - .env

nest实例拿不到mysql的服务名

image.png

修改docker-compose配置

  mysql-container:
    image: mysql
    container_name: mysql-container
+    restart: always
    ports:
      - '3306:3306'
    env_file:
      - .env
    volumes:
      - /d/env-docker/data/mysql-data:/var/lib/mysql
      # - /Users/sam/MyCode/Env/env-docker/data/mysql-data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: cash_demo
      MYSQL_ROOT_PASSWORD: root
    networks:
      - common-network
 
 networks:
  common-network:
-    driver: bridge

最终的配置

docker-compose.yml

version: '3.8'
services:
  nest-app:
    build:
      context: ./
      dockerfile: ./Dockerfile
    env_file:
      - .env
    depends_on:
      - mysql-container
      - redis-container
    ports:
      - 8344:8344
    networks:
      - common-network
  mysql-container:
    image: mysql
    container_name: mysql-container
    restart: always
    ports:
      - '3306:3306'
    env_file:
      - .env
    volumes:
      - /d/env-docker/data/mysql-data:/var/lib/mysql
      # - /Users/sam/MyCode/Env/env-docker/data/mysql-data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: cash_demo
      MYSQL_ROOT_PASSWORD: root
    networks:
      - common-network
  redis-container:
    image: redis
    container_name: redis-container
    ports:
      - 6379:6379
    volumes:
      - /d/env-docker/data/redis-data:/data
      # - /Users/sam/MyCode/Env/env-docker/data/redis-data:/data
    networks:
      - common-network
networks:
  common-network

Dockerfile

FROM node:18.20-alpine as build-stage

WORKDIR /app

RUN npm install pnpm -g

COPY package.json .

RUN ln -s /sbin/runc /usr/bin/runc

RUN pnpm install

COPY . .

RUN pnpm run build

# production stage
FROM node:18.20-alpine as production-stage

COPY --from=build-stage /app/dist /app
COPY --from=build-stage /app/package.json /app/package.json
COPY --from=build-stage /app/prisma /app
COPY --from=build-stage /app/.env /app

WORKDIR /app

RUN npm install pnpm -g

RUN npm install @brakebein/prisma-generator-nestjs-dto -g

RUN pnpm install --production


RUN pnpx prisma generate

EXPOSE 8344

CMD ["node", "/app/src/main.js"]

.env

# DATABASE_URL=mysql://root:root@localhost:3306/cash_demo
DATABASE_URL=mysql://root:root@mysql:3306/cash_demo

server_port = 8344

redis_server_port = 6379
# redis_server_host = localhost
redis_server_host = redis-container
redis_server_db = 1