【问题标题】:Docker custom networks or network_mode = host which one should I select?Docker 自定义网络或 network_mode = host 我应该选择哪一个?
【发布时间】:2019-11-05 09:03:59
【问题描述】:

我有一个关于使用 network_host 模式的问题。 我在 docker_compose 中有 3 到 4 个 spring-boot 服务,我想相互通信。最初,我使用自定义网络来实现服务的互连,为此我必须为每个端口指定主机 url,但后来我发现了 network_mode 主机,我认为它对我来说更容易,代码更改更少。 我的问题是拥有自定义网络的最佳做法是什么?或者我们可以使用network_mode主机进行服务相互通信?

下面是我的 docker-compose 文件。

version: '3'
services:
    redis:                                                                          
       image: redis
       ports:
           - "6379:6379"
    cas-service:
        container_name: cas-service
        image: localhost:5000/cas-service:docker-1.0
        volumes:
             -/DiGiID:/DiGiID   
        ports:
           - "8082:8082"
        depends_on:
            - redis
    eureka-service:
        container_name: eureka-service
        image: localhost:5000/eureka-service:docker-1.0
        volumes:
             -/DiGiID:/DiGiID
        ports:
           - "8301:8301"        
    user-service:
        container_name: user-service
        image: localhost:5000/user-service:docker-1.0
        volumes:
             -/DiGiID:/DiGiID
        ports:
            - "8302:8302"
        depends_on:
              - cas-service
    sftp-service:
        container_name: sftp-service
        image: localhost:5000/sftp-service:docker-1.0
        volumes:
             -/DiGiID:/DiGiID
        ports:
            - "8333:8333"
        depends_on:
              - cas-service
    product-service:
        container_name: product-service
        image: localhost:5000/product-service:docker-1.0
        volumes:
             -/DiGiID:/DiGiID
        ports:
            - "8304:8304"
        depends_on:
              - cas-service
    device-service:
        container_name: device-service
        image: localhost:5000/device-service:docker-1.0
        volumes:
             -/DiGiID:/DiGiID
        ports:
            - "8303:8303"
        depends_on:
              - cas-service
    digiid-service:
        container_name: digiid-service
        image: localhost:5000/digiid-service:docker-1.0
        volumes:
             -/DiGiID:/DiGiID
        ports:
           - "8080:8080"

【问题讨论】:

    标签: spring-boot docker docker-compose


    【解决方案1】:

    如果您的服务都在同一个 docker-compose.yml 文件中声明,那么您应该直接连接它们(服务名称和内部端口),而不是通过主机上映射的端口。如果它们是在不同的文件中定义的,那么您仍然可以将它们放在同一个网络上并通过服务名称和内部端口连接它们。

    如果您移植 docker-compose.yml,我可以更好地解释您的情况。

    一般来说,除非您别无选择,否则请避免使用主机网络。

    【讨论】:

    • 嗨,我已经编辑了问题并添加了我的 docker-compose 文件。我想要实现的是将微服务与 eureka-service 连接(这是一个服务发现,它将使用 localhost ping 所有服务)。通过使用 custom_network 网桥,我无法 ping eureka 到其他服务,这就是我继续使用 network_mode 主机的原因。
    • Eureka ping 服务还是服务 ping Eureka 注册和发现?每个服务都应将 eureka 与eureka-service:8301 连接起来
    • 服务实际上正在 ping erueka。是的,我可以进行此更改,我只是避免在所有服务的代码中进行 url 更改,这就是为什么我想使用 network_mode = host.无论如何,不​​建议使用 network_mode 主机?
    • 尽量少使用主机网络。容器不应该依赖于外部因素(当然理想情况下)。所以如果你能避免它,你应该这样做。
    【解决方案2】:

    您的方案看起来适合桥接网络模式。如果您使用主机网络模式,它将获取主机属性,然后您需要隔离您的主机以消除任何类型的安全威胁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多