这是一个困难的问题,但是解决它会很棒,而且我的配置也很棒!
我有两个docker-compose项目:否1.包含traefik
的配置,否2.包含以my-service
作为参数的http://my-domain.tld
。
目标是从http://my-domain.tld
呼叫(例如ping)my-service
并接通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
不起作用。当我呼叫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
失败,因为该服务所依赖的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
行!但是请记住,我必须对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
正在等待您的建议,以使它变得完美!
编辑:重写docker-compose配置以分隔不同的案例,以显示我已尝试并完成的工作,因为对此有些困惑。
答案 0 :(得分:0)
如果您知道my-service
的主机名(或容器名)将是静态的,则可以通过其主机名(如果未指定主机名,则通过容器名来调用它;默认情况下,将其用作容器名)这是主机名)。
即如果my-service
的主机名为container1
,则可以从其他容器中对其进行ping操作(只要它们位于同一Docker网络中):ping container1