【发布时间】:2020-03-22 20:00:39
【问题描述】:
这是一个困难,但解决它会很棒,我的配置也很棒!
我有两个 docker-compose 项目:没有 1. 包含 traefik 的配置,没有 2. 包含有 http://my-domain.tld 作为参数的 my-service。
目标是从my-service 呼叫(比如说ping)http://my-domain.tld 并接通traefik。这两个服务现在都在同一个网络中,但我需要以某种方式传递 http://my-domain.tld 指向 traefik 的配置。
# Project no 1. configuration for traefik that I want to access from no 2. project
version: '3.7'
services:
traefik:
container_name: traefik
networks:
- default
networks:
default:
name: traefik
# Project no 2.
version: '3.7'
services:
my-service:
environment:
- URL=http://my-domain.tld
networks:
- traefik
networks:
traefik:
external:
name: traefik
尝试过的解决方案:
变体 a)
不起作用。当我调用http://my-domain.tld 时,它被定向到traefik 网络中的第一个节点(在我的情况下它是my-service 本身)。与原版的区别:aliases 在网络部分。
# Project no 2.
version: '3.7'
services:
my-service:
environment:
- URL=http://my-domain.tld
networks:
traefik:
aliases:
- ${MERCURE_DOMAIN}
networks:
traefik:
external:
name: traefik
变体 b)
失败,因为该服务所依赖的 traefik 不在项目/网络中:Service 'my-service' depends on service 'traefik' which is undefined. 与原始的差异:depends_on 和 extra_hosts。
# Project no 2.
version: '3.7'
services:
my-service:
environment:
- URL=http://my-domain.tld
networks:
- traefik
depends_on:
- traefik
extra_hosts:
- http://my-domain.tld:traefik
networks:
traefik:
external:
name: traefik
变体 c)
有效!但是请记住,我必须硬编码traefik 服务的 IP 地址。这不是最坏的情况,但它使项目的可移植性降低,我想避免它。与原版的区别:1. 项目的网络配置,traefik 服务的静态 IP 和 2. 项目的 extra_hosts。
# Project no 1. configuration for traefik that I want to access from next project
version: '3.7'
services:
traefik:
container_name: traefik
networks:
default:
ipv4_address: 172.133.239.10
networks:
default:
name: traefik
driver: bridge
ipam:
driver: default
config:
- subnet: 172.133.239.0/24
# Project no 2.
version: '3.7'
services:
my-service:
environment:
- URL=http://my-domain.tld
networks:
- traefik
extra_hosts:
- http://my-domain.tld:172.133.239.10
networks:
traefik:
external:
name: traefik
变体 d)
正在等待您的建议如何使它完美!
编辑:重写 docker-compose 配置以分隔案例以显示我已经尝试和完成的工作,因为对此存在一些混淆。
【问题讨论】:
-
不。这是不同的,因为我不是直接调用容器名称,而是调用my-domain.tld。
标签: docker docker-compose