Докер рой нестандартные контейнеры с трафиком - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь настроить роя докеров, используя traefik в цифровом океане.Я следовал этому руководству и заставляю его работать полностью, пока не добавлю один из своих пользовательских контейнеров.Я пытаюсь просто добавить сначала один (всего их 14), и все они очень похожи, все они являются экспресс-приложениями, которые служат в качестве успокаивающего API, обрабатывающего один ресурс на службу.Однако при попытке получить доступ к этому конкретному поддомену я получаю сообщение об отказе в соединении.

Вот мой файл docker-stack.yml:

version: '3.6'
services:
  traefik:
    image: traefik:latest
    networks:
      - mynet
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
    ports:
      - "80:80"
      - "8080:8080"
    command: --api

  main:
    image: nginx
    networks:
      - mynet
    deploy:
      labels:
        - "traefik.port=80"
        - "traefik.backend=main"
        - "traefik.frontend.rule=Host:domain.com"

  two:
    image: jwilder/whoami
    networks:
      - mynet
    deploy:
      labels:
        - "traefik.port=8000"
        - "traefik.backend=two"
        - "traefik.frontend.rule=Host:two.domain.com"

  three:
    image: emilevauge/whoami
    networks:
      - mynet
    deploy:
      labels:
        - "traefik.port=80"
        - "traefik.backend=three"
        - "traefik.frontend.rule=Host:three.domain.com"

  user-service:
    image: hollarves/users:latest
    env_file:
      - .env.user
    networks: 
      - mynet
    deploy:
      labels:
        - "traefik.port=80"
        - "traefik.backend=users"
        - "traefik.frontend.rule=Host:users.domain.com"              

networks:
  mynet:
    driver: overlay

Как я уже сказал, переход к two.domain.com и three.domain.com работают нормально, и контейнеры whoami отвечают своей информацией.Однако при попытке users.domain.com

я получаю сообщение об отказе в соединении. Примечание: domain.com - это фактический домен, который я использую, который в реальном времени указывает на кластер digitalocean, я просто скрываю его для конфиденциальностипричины.

Точка входа для этой службы пользователей:

if (process.env.NODE_ENV !== "production") {
    require("dotenv").load()
}

const express = require("express"),
    bodyParser = require("body-parser"),
    logger = require("morgan"),
    //helmet = require("helmet"),
    cors = require("cors"),
    PORT = parseInt(process.env.PORT, 10) || 80

const server = express(),
    routes = require("./server/routes")


//server.use(helmet())
server.use(cors())
server.use(logger("dev"))
server.use(bodyParser.json())
server.use("/", routes)

/*eslint no-console: ["error", { allow: ["log"] }] */
const serverObj = server.listen(PORT, () => { console.log("Server listening in PORT ", PORT) })

module.exports = serverObj

Я также могу подтвердить, что эта служба прослушивает PORT 80, поскольку она выводит ее при извлечении из нее журналов с использованием docker service logs test-stack_user-service:

test-stack_user-service.1.35p3lxzovphr@node-2    | > users-mueve@0.0.1 start /usr/src/app
test-stack_user-service.1.35p3lxzovphr@node-2    | > node server.js
test-stack_user-service.1.35p3lxzovphr@node-2    | 
test-stack_user-service.1.35p3lxzovphr@node-2    | Server listening in PORT  80

Вот мой конфигурационный файл traefik.toml на всякий случай:

debug = true
logLevel = "DEBUG"
defaultEntryPoints = ["http"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
[retry]
[docker]
endpoint="unix:///var/run/docker.sock"
exposedByDefault=true
watch=true
swarmmode=true

Я также могу видеть контейнеры на панели инструментов traefik, как я использовал в моем локальномокружающая среда.

Мне кажется, что мне не хватает очень маленькой детали, которая мешает моей службе работать правильно.Любые указатели будут чрезвычайно оценены.

Спасибо!

...