У меня есть настройка dev, использующая docker, и приложение, и Jest. Api следит за моей кодовой базой и использует babel для отслеживания любых изменений и компиляции новой версии, pm2 запускается внутри контейнера docker, чтобы перезапустить приложение при любых изменениях. В apiTest я запускаю шутки в режиме просмотра.
docker -compose.yml
version: '3.7'
services:
api:
image: api
build: ./
env_file:
- .env
ports:
- 4000:4000
volumes:
- .:/app
- /app/node_modules/
tty: true
apiTest:
image: api
build: ./
env_file:
- .test.env
volumes:
- .:/app
- /app/node_modules/
tty: true
command: 'npm test'
Dockerfile
FROM node:12.15.0
WORKDIR /app
COPY package.json /app
COPY package-lock.json /app
RUN npm install
EXPOSE 4000
CMD ["npm", "run", "start:dev"]
пакет. json
"scripts": {
"start": "npm run build && node lib/bin/www",
"start:dev": "npm run build && npx knex migrate:latest && concurrently \"npm:build:watch\" \"npm:pm2:logs\" \"npm:run:dev\"",
"run:dev": "pm2-runtime start ecosystem.config.js",
"pm2:logs": "pm2 logs",
"type-check": "tsc --noEmit",
"type-check:watch": "npm run type-check -- --watch",
"build": "npm run build:types && npm run build:js",
"build:types": "tsc --emitDeclarationOnly",
"build:watch": "babel src --out-dir lib --extensions \".ts,.tsx,.js\" --source-maps inline --watch",
"build:js": "babel src --out-dir lib --extensions \".ts,.tsx,.js\" --source-maps inline",
"test": "jest --watch",
"pretest": "npm run migrate:reset",
"migrate:reset": "npx knex migrate:rollback --all && npx knex migrate:latest",
"migrate:seed": "npx knex migrate:latest && npx knex seed:run",
"migrate": "docker-compose run --rm api npx knex migrate:latest",
"migrate:rollback": "docker-compose run --rm api npx knex migrate:rollback",
"seed": "docker-compose run --rm api npx knex seed:run"
Когда я нажимаю docker - составить, сначала он работает отлично, но после нескольких автоматических перезапусков с pm2 я получаю
api_1 | [run:dev] Error: /app/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node: invalid ELF header
Когда я перезагружаю docker - составьте ошибку, кажется, ушла.