Я пытаюсь настроить роя докеров, используя 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, как я использовал в моем локальномокружающая среда.
Мне кажется, что мне не хватает очень маленькой детали, которая мешает моей службе работать правильно.Любые указатели будут чрезвычайно оценены.
Спасибо!