У меня есть приложение узла, работающее с использованием 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