docker - 无法从 docker 容器访问由 traefik 代理的站点
问题描述
如果我使用端口号,我可以从服务机器访问站点;例如http://localhost:8080但如果我从我的局域网外部尝试使用 url 它将不起作用。我有一个适用于 traefik 的前端规则,但它不适用于其他容器。
码头工人-compose.yml:
version: "2"
services:
traefik:
image: traefik:latest
command: --api --docker --logLevel=DEBUG
hostname: mysite.ddns.net
restart: unless-stopped
networks:
- web
- bridge
ports:
- 80:80
- 8080:8080
- 443:443
labels:
- "traefik.docker.network=web"
- "traefik.enable=true"
- "traefik.backend=traefik"
- "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefixStrip: /traefik"
- "traefik.port=8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- "/docker/traefikcompose/traefik.toml:/etc/traefik/traefik.toml"
- /docker/traefikcompose:/etc/traefik:rw
container_name: traefik
networks:
web:
external: true
bridge:
external: false
traefik.toml:
traefikLogsFile = "log/traefik.log"
accessLogsFile = "log/access.log"
ProvidersThrottleDuration = "5s"
MaxIdleConnsPerHost = 200
debug = true
logLevel = "ERROR"
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[retry]
[api]
#dashboard = true
#entryPoint = "dashboard"
address= ":8080"
[docker]
endpoint = "unix:///var/run/docker.sock"
#endpoint = "//var/run/docker.sock:/var/run/docker.sock"
domain = "mysite.ddns.net"
watch = true
exposedbydefault = true
[acme]
email = "mymail@gmail.com"
#caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"
storage = "acme.json"
entryPoint = "https"
acmeLogging = true
onDemand = true
OnHostRule = true
[acme.httpChallenge]
entryPoint = "http"
[[acme.domains]]
main = "mysite.ddns.net"
我在不同的 ymls 中有一个 Ghost-Blog 和 Home-assistant:
Ghost 博客 Docker-Compose:
version: "2"
services:
ghost:
image: ghost
container_name: ghost
hostname: mysite.ddns.net
restart: unless-stopped
networks:
- web
- bridge
ports:
- 2368:2368
labels:
- "traefik.docker.network=web"
- "traefik.enable=true"
- "traefik.backend=ghost"
- "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefixStrip: /blog, ${DOMAINNAME}"
- "traefik.port=2368"
volumes:
- "/docker/ghost/blog:/var/lib/ghost/content"
environment:
- NODE_ENV=production
- url=http://mysite.ddns.net
networks:
web:
external: true
bridge:
external: false
家庭助理 Docker 撰写:
version: "2"
services:
home-assistant:
image: homeassistant/home-assistant
container_name: home-assistant
hostname: mysite.ddns.net
privileged: true
restart: unless-stopped
networks:
- web
- bridge
ports:
- 8123:8123
- 8943:8943
labels:
- "traefik.docker.network=web"
- "traefik.enable=true"
- "traefik.backend=home-assistant"
- "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefixStrip: /hass"
- "traefik.port=8123"
#- "traefik.basic.protocol=http"
volumes:
- "/docker/home-assistant/config:/config"
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
devices:
- "/dev/bus/usb:/dev/bus/usb"
networks:
web:
external: true
bridge:
external: false
DOMAINNAME 已定义并在 .env 文件中工作。我在防火墙和路由器中打开了 80、443、2368、8123、8080 端口。
有什么建议么?
解决方案
推荐阅读
- c# - C# Restful WCF 服务。无法在帖子正文中反序列化 XML
- testing - 使用 TestCafe 运行器时 dockerfile 中的文件或全局参数
- c# - EF:选择所有不在另一个表中的
- python-3.x - python在vsphere上列出所有带有ip的vm
- task - Conemu:如何在当前打开的选项卡中打开目录?
- wpf - WPF XAML:如何使用自定义 RoutedEvent 修复“值不能为空”
- python - 使用 Python 请求检查 Xbox Live 帐户是否存在
- javascript - 如何通过电子表格使用应用程序脚本在新选项卡中打开特定的谷歌文件夹
- database - 我需要从数据库中提取值并将参数显示为 Jenkins 参数化作业中的下拉列表。建议一种方法来实现这一点
- javascript - React 给了我错误期望一个赋值或函数调用,而是看到一个表达式