Tra*_*Guy 5 mysql node.js sequelize.js docker docker-compose
我正在尝试将我的 NodeJS API 与 MySQL 映像一起 docerize。在初次运行之前,我想运行 Sequelize 迁移和种子,以准备好表并准备好提供服务。
这是我的docker-compose.yaml:
version: '3.8'
services:
mysqldb:
image: mysql
restart: unless-stopped
environment:
MYSQL_ROOT_USER: myuser
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_DATABASE: mydb
ports:
- '3306:3306'
networks:
- app-connect
volumes:
- db-config:/etc/mysql
- db-data:/var/lib/mysql
- ./db/backup/files/:/data_backup/data
app:
build:
context: .
dockerfile: ./Dockerfile
image: node-mysql-app
depends_on:
- mysqldb
ports:
- '3030:3030'
networks:
- app-connect
stdin_open: true
tty: true
volumes:
db-config:
db-data:
networks:
app-connect:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
这是我的应用程序Dockerfile:
FROM node:lts-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3030
ENV PORT 3030
ENV NODE_ENV docker
RUN npm run db:migrate:up
RUN npm run db:seeds:up
CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)
这是我的default.db.jsonSequelize 迁移使用的(缩短):
FROM node:lts-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3030
ENV PORT 3030
ENV NODE_ENV docker
RUN npm run db:migrate:up
RUN npm run db:seeds:up
CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)
运行compose up数据库安装良好后,映像会部署,但当它到达RUN npm run db:migrate:up(转换为npx sequelize-cli db:migrate)时,我收到错误:
npx: installed 81 in 13.108s
Sequelize CLI [Node: 14.17.0, CLI: 6.2.0, ORM: 6.6.2]
Loaded configuration file "default.db.json".
Using environment "docker".
ERROR: getaddrinfo EAI_AGAIN mysqldb
npm ERR! code ELIFECYCLE
npm ERR! errno 1
Run Code Online (Sandbox Code Playgroud)
"host"如果我将 中的更改default.db.json为"127.0.0.1",我就可以ERROR: connect ECONNREFUSED 127.0.0.1:3306代替ERROR: getaddrinfo EAI_AGAIN mysqldb。
我做错了什么,我应该指定什么主机以便应用程序可以看到 MySQL 容器?我应该删除网络吗?我应该更改端口吗?(到目前为止,我尝试了两者的组合,但没有成功)。
我通过使用Docker Compose Wait解决了我的问题。本质上,它添加了一个对数据库容器进行采样的等待循环,并且仅当它启动时,才运行迁移并为数据库播种。
我的下一个问题是:每次容器运行时这些种子都会运行 - 我通过运行运行种子的脚本和touch信号量文件来解决这个问题。如果文件已经存在,它将跳过种子。
| 归档时间: |
|
| 查看次数: |
9482 次 |
| 最近记录: |