Что такое команда CMD для nats-сервера внутри Dockerfile

#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: не может быть использован.