如何在 Dockerfile 上运行 db-migrate up?

问题描述 投票:0回答:1

当我运行以下 Dockerfile 时,在该过程的中间,安装 prisma 后,RUN 命令 db-migrate up 停止了。但是当我使用 docker exec bin bash 运行它时,它工作没有任何问题。我认为我无法在提供应用程序之前运行该应用程序。但是有一个解决方法,例如将迁移命令作为服务放在 docker-compose.yml 中。如何实现?或者是否有任何方法可以在此 Dockerfile 中运行这些迁移的 RUN 命令?

Dockerfile

FROM node:16.15.0-alpine

WORKDIR /app

COPY package*.json ./

# generated prisma files
COPY prisma ./prisma/

# COPY ENV variable
COPY .env ./

# COPY
COPY . .

RUN npm install

RUN npm install -g db-migrate

RUN npm install -g prisma

RUN db-migrate up

RUN prisma db pull

RUN prisma generate

EXPOSE 3000

CMD ["npm", "run", "dev"]

docker-compose.yml

version: '3.8'

services:
  mysqldb:
    image: mysql:5.7
    restart: unless-stopped
    env_file: ./.env
    environment:
      - MYSQL_ROOT_PASSWORD=$MYSQLDB_ROOT_PASSWORD
      - MYSQL_DATABASE=$MYSQLDB_DATABASE
    ports:
      - $MYSQLDB_LOCAL_PORT:$MYSQLDB_DOCKER_PORT
    volumes:
      - db:/var/lib/mysql
  auth:
    depends_on:
      - mysqldb
    build: ./auth
    restart: unless-stopped
    env_file: ./.env
    ports:
      - $NODE_LOCAL_PORT:$NODE_DOCKER_PORT
    environment:
      - DB_HOST=mysqldb
      - DB_USER=$MYSQLDB_USER
      - DB_PASSWORD=$MYSQLDB_ROOT_PASSWORD
      - DB_NAME=$MYSQLDB_DATABASE
      - DB_PORT=$MYSQLDB_DOCKER_PORT
    stdin_open: true
    tty: true

volumes:
  db:
docker docker-compose dockerfile
1个回答
0
投票

最后你必须在

run.sh
shell 脚本中执行此操作。 我的解决方案可以在这里找到。它小而简单。

© www.soinside.com 2019 - 2024. All rights reserved.