#node.js #docker #microservices #nestjs #nats.io
#node.js #docker #микросервисы #nestjs #nats.io
Вопрос:
В настоящее время я создаю приложение с использованием NestJS, следуя микросервисной архитектуре. И используйте NATS в качестве системы обмена сообщениями. Он отлично работает на моем локальном компьютере, но я не могу настроить сервер NATS.
Структура папок моего проекта:
├─── services/
├─── nats/
| Dockerfile
├─── client/
| ...
| ...
| .dockerignore
| Dockerfile
└─── docker-compose.yml
Теперь Dockerfile
внутренняя nats/
папка описывается следующим образом:
FROM nats:2.1.9
EXPOSE 4222
CMD [ "nats-server" ]
И Dockerfile
внутри client/
папки описывается как:
FROM node:12
WORKDIR /myProject/src/app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 8081
CMD [ "node", "dist/main" ]
И docker-compose.yml
это:
version: '3'
services:
nats-server:
image: nats:2.1.9
restart: always
build: ./nats
ports:
- 4222:4222
client-service:
build: ./client
volumes:
- ./client:/myProject/src/app
depends_on:
- nats-server
environment:
NODE_ENV: development
ports:
- 8081:3000
Я запустил команду sudo docker-compose build и не обнаружил ошибки, после этого запустите команду sudo docker-compose up и обнаружил следующую ошибку:
Recreating services_nats-server_1 ... done
Recreating services_client-service_1 ... done
Attaching to services_nats-server_1, services_client-service_1
nats-server_1 | nats-server: unrecognized command: "nats-server_1"
services_nats-server_1 exited with code 1
nats-server_1 | nats-server: unrecognized command: "nats-server_1"
nats-server_1 | nats-server: unrecognized command: "nats-server_1"
nats-server_1 | nats-server: unrecognized command: "nats-server_1"
client-service_1 | [Nest] 1 - 12/03/2020, 4:44:34 PM [NestFactory] Starting Nest application...
client-service_1 | [Nest] 1 - 12/03/2020, 4:44:34 PM [InstanceLoader] AppModule dependencies initialized 41ms
client-service_1 | [Nest] 1 - 12/03/2020, 4:44:34 PM [InstanceLoader] MongooseModule dependencies initialized 1ms
client-service_1 | [Nest] 1 - 12/03/2020, 4:44:34 PM [InstanceLoader] ClientsModule dependencies initialized 1ms
client-service_1 | [Nest] 1 - 12/03/2020, 4:44:34 PM [InstanceLoader] ClientsModule dependencies initialized 0ms
client-service_1 | [Nest] 1 - 12/03/2020, 4:44:34 PM [InstanceLoader] ConfigHostModule dependencies initialized 1ms
client-service_1 | [Nest] 1 - 12/03/2020, 4:44:34 PM [InstanceLoader] ConfigModule dependencies initialized 1ms
services_nats-server_1 exited with code 1
nats-server_1 | nats-server: unrecognized command: "nats-server_1"
nats-server_1 | nats-server: unrecognized command: "nats-server_1"
nats-server_1 | nats-server: unrecognized command: "nats-server_1"
nats-server_1 | nats-server: unrecognized command: "nats-server_1"
nats-server_1 | nats-server: unrecognized command: "nats-server_1"
С Dockerfile клиентской службы проблем нет, поскольку это зависит от того, какой nats-сервер попытался запустить его первым. Может кто-нибудь, пожалуйста, помочь мне разобраться в проблеме?
Я хотел бы поблагодарить вас за ваше время и внимание.
Ответ №1:
build:
Команда для nats-server
службы перезаписала образ Docker Hub. Мне просто нужно извлечь изображение и открыть порт.
Итак, мой docker-compose.yml
файл будет выглядеть следующим образом:
version: '3'
services:
nats-server:
image: nats:2.1.9
restart: always
ports:
- 4222:4222
client-service:
build: ./client
volumes:
- ./client:/myProject/src/app
depends_on:
- nats-server
environment:
NODE_ENV: development
ports:
- 8081:3000
Ответ №2:
Проверьте Dockerfile, и вы заметите, что ENTRYPOINT
для него установлено значение /nats-server
и CMD
являются параметрами ENTRYPOINT
( --config nats-server.conf
в этом случае). Если вы не расширяете образ nats, вам не нужно создавать новый на его основе (удалить build: ./nats
из файла compose). Переопределение значения по умолчанию CMD
может быть достигнуто путем установки command:
на docker-compose.yml
.
Комментарии:
1. (Эта комбинация
build:
иimage:
также перезапишет образ Docker Hub вашим измененным; вручнуюdocker pull nats:2.1.9
заставит Docker повторно получить официальный.)2. @DavidMaze вы правы.
build:
не может быть использован.