Трудности разоблачения моего экспресс-докера - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть приложение узла, работающее с использованием Express для запуска веб-сервера в контейнере Docker. Мое приложение-узел выглядит примерно так:

'use strict'
const childProcess = require('child_process');
const express = require('express');
... // so many requires


const main = async () => {
  var app = express();

  app.get('/status', function (req, res) {
    res.send('Hello World')
  });

  app.listen(8080,'0.0.0.0');

  ... // so much more code

}

main().catch((err) => {
  console.error(err);
});

Я не верю, что с моим приложением узла что-то не так, потому что когда я захожу в свой докер-контейнер с помощью: docker exec -it blacklist-service_blacklist-service_run_1 / bin / bash

И работает: curl localhost: 8080 / status

Возвращает Hello World

Таким образом, это заставляет меня поверить, что с моей конфигурацией докера что-то не так, например, когда я запускаю: curl localhost: 8080 / status с моего хоста, я получаю: curl: ( 7) Не удалось подключиться к локальному порту 8080: соединение отклонено

Итак ... мой Dockerfile выглядит так:

FROM ubuntu:bionic

RUN apt-get update && apt-get -qq install \
  curl \
  git \
  gnupg2 \
  locales \
  netcat \
  python3-pip

RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

RUN pip3 install abydos \
    num2words \
    simplejson \
    unidecode

RUN curl -sL https://deb.nodesource.com/setup_10.x | bash
RUN apt-get -qq install nodejs
RUN npm install npm@latest -g

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

RUN npm install -g \
  Eficode/wait-for

RUN npm install \
    express \
    googleapis \
    uuid

COPY src/ .
COPY bin/ ./bin

EXPOSE 8080

ENTRYPOINT /usr/lib/node_modules/wait-for/wait-for ${WAIT_FOR} -t 20 -- node server.js

(я знаю, я знаю, но необходимо использовать Ubuntu в качестве нашего образа докера)

Затем у меня есть файл docker-compose, который выглядит следующим образом:

version: "3.6"

services:
  rabbitmq:
    image: "rabbitmq:latest"
    ports:
      - "15672:15672"
      - "5672:5672"
    volumes:
      - "./enabled_plugins:/etc/rabbitmq/enabled_plugins"
  blacklist-service:
    environment:
      NODE_ENV: development
    image: ${DOCKER_REGISTRY}unicorn/blacklist-service:${DOCKER_IMAGE_LABEL:-latest}
    build:
      context: .
      dockerfile: ./debugging/Dockerfile
    ports:
      - "0.0.0.0:8080:8080"
    depends_on:
      - rabbitmq
    environment:
      - WAIT_FOR=rabbitmq:5672
      - AMQP_SHARED_HOST=rabbitmq
      - AMQP_USERNAME=guest
      - AMQP_PASSWORD
      - AMQP_EXCHANGE=amq.topic
      - AMQP_TOPIC=topic
      - AMQP_JOB=state51::Job::RunQAForFormat
      - AMQP_QUEUE
      - AMQP_PATTERN=#
      - AMQP_SHARED_PORT=5672
      - AMQP_SEND_EXCHANGE=firehose
      - BLACKLIST_SERVICE_SECRET
      - GOOGLE_PRIVATE_KEY
      - GOOGLE_CLIENT_EMAIL
      - GOOGLE_CLIENT_ID
      - GOOGLE_API_KEY

. / Debugging / Dockerfile относится к указанному выше Dockerfile.

Затем я создаю свой образ с помощью: docker-compose -f docker-compose.local.yml build и запускаю его с помощью: docker-compose -f docker-compose.local.yml run черный список-сервис (при этом docker-compose.local.yml является именем указанного выше файла docker-compose).

Так где же я ошибся с разоблачением моего сервера? работающее сообщество Docker: версия 18.06.1-ce-mac73 (26764) на моем Mac

1 Ответ

0 голосов
/ 13 ноября 2018

Мне нужно добавить параметр --service-ports при использовании docker-compose run [service-name].

Итак, правильная команда: docker-compose -f docker-compose.local.yml run --service-ports blacklist-service, которая позволяет мне свернуться до localhost: 8080 / status и получить ожидаемый ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...