如何从连接到外部网络的另一个组合访问容器?

时间:2018-07-25 15:21:33

标签: docker docker-compose docker-networking docker-network

以下是我希望从外部容器连接到的容器配置的构成文件(在另一个构成文件中定义):

version: '3.5'
services:
  service-to-connect-to:
    build: .
    networks:
      - my-external-network

networks:
  my-external-network:
    external: true

和另一个组成文件,其中包含我要从中连接到service-to-connect-to的容器的配置:

version: "3.5"

services:
  service-to-connect-from:
    build: .

我试图通过以下域连接到service-to-connect-to

service-to-connect-to service-to-connect-to.my-external-network my_external_network.service-to-connect-to

但它们都没有起作用。

我错了吗?

谢谢

2 个答案:

答案 0 :(得分:4)

首先,必须将两个服务都添加到同一网络才能连接它们。因此,后者的撰写文件应类似于

version: "3.5"

services:
  service-to-connect-from:
    build .
    networks:
      - my-external-network

networks:
  my-external-network:
    external: true

现在,两个服务都在同一网络上,它们可以使用容器的名称相互查找。默认情况下,容器名称与服务名称相同,但docker compose还会在其前面加上项目名称作为前缀,默认情况下,该名称是组成文件所在的目录名称。如果您首先通过docker-compose up -d启动服务,然后查看通过运行docker ps来命名容器的方式,则可以看到此信息。容器名称可以是project1_service-to-connect-to。使用此名称,您可以从其他服务连接。

如果愿意,还可以使用container_name选项为服务显式设置容器的名称。使用时,compose不再是容器名称的前缀。

答案 1 :(得分:0)

这对于compose是不可能的,因为第二个docker-compose文件将使用当前目录名称创建一个不同的网络,然后您的这两个服务将位于两个不同的docker网络中,并且无法彼此通信。

因此您可以做两件事: 1.为这两种服务使用相同的网络(最好是合并一个组合文件)。 2.使用docker swarm stacks,您可以在其中使用Dim rng As Range, destRow As Long Dim shtSrc As Worksheet, shtDest As Worksheet Dim c As Range '-- this is used to store the single cell in the For Each loop Dim d As Range '-- this is used to store the single cell in the For Each loop Set shtSrc = Sheets("Projects") ' Sets "Projects" sheet as source sheet Set shtDest = Sheets("Look Ahead") 'Sets "Look Ahead" sheet as destination sheet destRow = 5 'Start copying to this row on destination sheet ' >> Set range to search for dates in Look Ahead period << Set rng = Application.Intersect(shtSrc.Range("J:Q"), shtSrc.UsedRange) ' >> Look for matching dates in columns Q and S on Projects Sheet << For Each c In rng.Cells If (c.value >= startDate And c.value <= endDate) Or _ (c.Offset(0, 2).value >= startDate And c.Offset(0, 2).value <= endDate) Then ' Does date fall between start and end dates? If Yes, then copy to destination sheet End If Next For Each d In rng.Cells If (d.value = ComboBox2) Or _ (d.Offset(0, 2).value = ComboBox2) Then shtSrc.Range("C" & c.Row).Copy shtDest.Range("B" & destRow) shtSrc.Range("G" & c.Row).Copy shtDest.Range("A" & destRow) shtSrc.Range("J" & d.Row).Copy shtDest.Range("E" & destRow) shtSrc.Range("Q" & c.Row).Copy shtDest.Range("C" & destRow) shtSrc.Range("S" & c.Row).Copy shtDest.Range("D" & destRow) destRow = destRow + 1 ' > Ends search < End If Next

连接到其他服务

参考: https://docs.docker.com/docker-cloud/apps/service-links/#using-service-and-container-names-as-hostnames

https://docs.docker.com/v17.09/engine/userguide/networking/configure-dns/

注意:服务链接也无济于事,因为compose在运行第二个文件时会创建不同的网络。