#docker #docker-compose #dockerfile
#докер #docker-создать #докерфайл
Вопрос:
Когда я запускаю свой образ docker, я получаю сообщение об ошибке, в котором говорится, что он не может найти этот модуль. Но когда я тестирую свой сервер вне docker, я не вижу этой ошибки. Может кто-нибудь, пожалуйста, сказать мне, где я ошибаюсь? У меня также есть файл dockerignore, в котором есть только node_modules .
Докерфайл
FROM node:13-alpine
RUN mkdir -p /server
RUN npm install
COPY . /server
EXPOSE 5000
CMD [ "node", "/server/server.js" ]
docker-создать файл
version: '3'
services:
mongodb:
image: mongo
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=FoodCore
- MONGO_INITDB_ROOT_PASSWORD=Guy123su
volumes:
- mongo-data:/data/db
mongo-express:
image: mongo-express
ports:
- 8080:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=FoodCore
- ME_CONFIG_MONGODB_ADMINPASSWORD=Guy123su
- ME_CONFIG_MONGODB_SERVER=mongodb
volumes:
mongo-data:
driver: local
Комментарии:
1. Вам нужно
COPY package.json package.lock ./
, прежде чем вы сможетеRUN npm install
.2. @DavidMaze я вставил эту строку под
COPY . /server
и переместилRUN npm install
ниже этой строки, но это дает мне ошибку, когда я создаю изображение, которое невозможно скопировать. НеCOPY . /server
копирует все в этом каталоге в /server? так что не будет package.json и package. блокировка уже там, так как она не жалуется на мои другие модули, а просто выражает??3. В чем
WORKDIR
вы находитесь, когда выRUN npm install
? (Я думаю, что в базовомnode
образе вы будете/
, но вы копируете все/server
.)4. @DavidMaze Так что каким-то образом это сработало, когда я осел
WORKDIR /server
. Я не указывал это, поэтому я не уверен, как это повлияло.