#node.js #docker #npm
#node.js #docker #npm
Вопрос:
Я создал экспресс-API, и он будет нормально работать на порту 5000. Когда я помещаю его в контейнер Docker, он сначала запускается, но затем я получаю сообщение об ошибке, подобное этому.
> nodejs-express-sequelize-postgresql@1.0.0 start
> nodemon server.js
[nodemon] 2.0.6
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node server.js`
(node:33) [SEQUELIZE0004] DeprecationWarning: A boolean value was passed to options.operatorsAliases. This is a no-op with v5 and should be removed.
(Use `node --trace-deprecation ...` to show where the warning was created)
(node:33) Warning: Accessing non-existent property 'Sequelize' of module exports inside circular dependency
Server is running on port 5000.
Executing (default): CREATE TABLE IF NOT EXISTS "simplenims" ("id" SERIAL , "nim" VARCHAR(255), "nama" VARCHAR(255), "status" BOOLEAN, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, PRIMARY KEY ("id"));
[nodemon] Internal watch failed: Circular symlink detected: "/usr/bin/X11" points to "/usr/bin"
npm ERR! code 1
npm ERR! path /
npm ERR! command failed
npm ERR! command sh -c nodemon server.js
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-12-14T11_53_26_130Z-debug.log
Это мой файл Dockerfile выглядит так
FROM node:latest
WORKDIR /
COPY package*.json ./
RUN npm install
COPY . .
ENV port=5000
EXPOSE 5000
CMD ["npm", "start"]
Я следовал документации Docker, чтобы создать Dockerfile. Что-то не так или мне нужно добавить в Dockcerfile?
Ответ №1:
Nodemon просматривает все файлы внутри корневого каталога проекта. Чтобы избежать этой проблемы, вы можете создать nodemon.js
файл в корне проекта со следующим содержимым:
{
"ext": "js"
}
Этот ответ взят из проблемы Github. Это действительно похоже на вашу проблему.
[Проблема с Github] Сбой внутренней проверки: обнаружена циклическая символическая ссылка
Ответ №2:
Это связано с nodemon. Вот как решить —
С dockerfile вот так:
FROM node:14.15.0
WORKDIR /app
COPY . /app
RUN npm install
CMD npm run dev
Создайте образ и затем запустите его в контейнере с интерактивным терминалом (необязательно), подключив том из текущего каталога хоста (pwd) в WORKDIR (/ app) в контейнере:
docker build -t imagename:tag .
docker run -it -p 1234:1234 -v $(pwd):/app imagename:tag
Или с помощью docker-compose.yml
version: '3.6'
services:
server:
build: .
volumes:
- .:/app
ports:
- "3000:3000"
Затем запустите
docker-compose up --build