遇到的问题
使用docker-compose部署3个服务实例后,一直拿不到redis
因为build的时候里面没有.env , 所以读不到配置
需要copy一份过去并且在docker-compose nest配置里面加入
Dockerfile
COPY --from=build-stage /app/.env /app
docker-compose.yml
env_file:
- .env
nest实例拿不到mysql的服务名
修改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