当我仍需要对地址进行硬编码时,为什么还要使用docker链接?

时间:2018-12-13 20:15:32

标签: docker docker-compose docker-link

您好,我不了解以下内容:

-在docker世界中,根据我的理解:

  • application公开的端口
  • 容器为应用程序公开的端口
  • 主机映射容器端口的端口

鉴于这些事实,我们在docker-expose内配置了2个容器

如果:

app | Host Port | Container Port | App Port

app1    8300         8200            8200
app2    9300         9200            9200

如果app2需要直接通过app1docker-host通信,为什么我要使用链接,因为我仍然必须在app2的环境中对{ hostname中的{1}}和portapp1的容器名称和app1的容器的port的容器名)?(在我们的示例中:app1port=8200

host=app1Inst

2 个答案:

答案 0 :(得分:2)

您不需要在现代Docker上使用链接。但是,您绝对不应在任何地方对主机名或端口进行硬编码。 (例如,请参阅每个SO问题,这些问题指出在直接在开发人员系统上运行时可以与localhost进行服务交互,而在Docker中运行时则需要其他主机名。) docker-compose.yml文件是部署时配置,是设置从一个服务指向另一个服务的环境变量的好地方。

正如您在拟议的docker-compose.yml文件中所指出的那样,Docker网络和相关的DNS服务基本上完全替代了链接。链接首先存在,但不再有用。

还请注意,Docker Compose将为您创建一个默认网络,并且docker-compose.yml文件中的服务块名称可用作主机名。您可以将该文件缩小为:

version: '3'
services:
  app1:
    image: app1img
    ports:
      - '8300:8200'
  app2:
    image: app2img
    ports:
      - '9300:9200'
    env:
      APP1_URL: 'http://app1:8200'
    depends_on:
      - app1

答案 1 :(得分:1)

简短的回答,不,您不需要链接,它现在在docker中已弃用,不推荐使用。 https://docs.docker.com/network/links/

话虽如此,由于两个容器都在同一网络ret-net上,因此即使没有ports设置,它们也可以在所有端口之间自由发现并相互通信。

ports设置对于从外部访问容器(例如,容器)起作用。从主机。

environment设置仅在容器内设置环境变量,因此应用程序知道如何找到app1Inst和正确的端口8200