【问题标题】:docker-compose configuration to reach container from different project/network via domain urldocker-compose 配置以通过域 url 从不同的项目/网络访问容器
【发布时间】: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_onextra_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 配置以分隔案例以显示我已经尝试和完成的工作,因为对此存在一些混淆。

【问题讨论】:

标签: docker docker-compose


【解决方案1】:

如果您知道 my-service 的主机名(或容器名称)将是静态的,您可以通过它的主机名(或容器名称,如果未指定主机名)调用它;默认使用容器名称作为主机名)。

即如果my-service 的主机名是container1,你可以像这样从你的另一个容器中ping 它,(只要它们在同一个Docker 网络中):ping container1

【讨论】:

  • 但我的主要目标是调用http://my-domain.tld. 而不是my-serviceextra_hosts 让我定义这个域到主机的关系,但仅在提供depends_on 时在同一个网络中。我需要在不同的网络上进行这项工作。
  • @aurelijus 如果您删除了depends_on 会怎样?另外,我认为您不需要第一个网络:使用 try 1 时,您将定义它两次。
  • @scott 查看更新的问题。尝试使用我尝试过的所有解决方案使其尽可能清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多