当前位置: 首页 > 知识库问答 >
问题:

向世界公开我的express docker容器的困难

卢英范
2023-03-14

我有一个节点应用程序,使用express在docker容器中运行webserver。我的节点应用程序看起来有点像这样:

'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);
});

返回Hello World

因此,它使我相信我的docker配置有问题,因为当我从主机运行:curl localhost:8080/status时,我收到:curl:(7)未能连接到localhost: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
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

那么,我在暴露服务器时哪里出了问题?在我的Mac上运行Docker社区:版本18.06.1-ce-mac73(26764)

共有1个答案

高砚
2023-03-14

在使用docker-compose run[service-name]时,我需要添加参数--service-ports

因此,正确的命令是:docker-compose-f docker-compose.local.yml run--service-ports blacklist-service,它允许我卷曲到localhost:8080/status并获得我所期望的响应。

 类似资料:
  • 我运行了一个想要迁移到Kubernetes的微小(读作:单节点)Docker Swarm集群,我想不出如何在特定端口上公开一个服务,以便从外部世界访问它。 在Docker Swarm中,我可以通过指定 在服务规范中。但这是不允许的:Kubernetes告诉我。 然后是,它似乎与我想要做的事情非常一致,但它处于测试版,显然是针对HTTP服务的(这并不覆盖我的所有用例)。还有类型,但我没有使用支持它的

  • 那么当http2被广泛采用的时候,世界将会成什么样呢?或者说,它会被真正的采用吗? 8.1. http2会如何影响普通人? 到目前为止,http2还没被大范围部署使用,我们也无法确定到底会发生什么变化,但至少可以参考SPDY的例子和曾经做过的实验来进行大概的估计。 http2减少了网络往返传输的数量,并且用多路复用和快速丢弃不需要的流的办法来完全避免了head of line blocking(线

  • 问题内容: 如果我正在编写.NET代码,那么我经常会揭露任何可能有意义的地方。也许这取决于LINQ和您可以使用foreach的事实,但是这样做是“正确的”。 现在,我正在编写Java 8代码,并在辩论是否应该以相同的方式进行公开?也许是因为我必须打电话给我,感觉就像是在“工作”,但感觉不对吗? 是否应该以可能相同的方式在接口上公开? 问题答案: 您在问错问题。毕竟,同时支持这两者并不难,例如 因此

  • 如果我正在编写.NET代码,我通常会公开

  • 我正在编码我的第一个《我的世界》mod,我可以让我的项目加载纹理。我对编码《我的世界》mod很不熟悉,我有点困惑。以下是基本项目的代码: 这是实际项目的代码:

  • 我该怎么办?我的地雷船不会在日食中发射!以下是坠机报告: 我很确定我试图制作的mod不是一个错误。我甚至尝试在没有mod的情况下启动。它仍然不起作用。无论如何,这是我的mod代码: