gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:46:04 25 4
gpt4 key购买 nike

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

-在docker世界中,据我所知:

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

  • 因此,鉴于这些事实,在 docker-expose中配置了2个容器

    如果:
    app | Host Port | Container Port | App Port

    app1 8300 8200 8200
    app2 9300 9200 9200

    如果 app2需要直接通过 app1docker-host通信,为什么我要使用链接,因为我仍然必须以某种方式在 app2的环境中对 hostnameportapp1( app1的container_name和 port的容器的 app1)进行硬编码?例如: port=8200host=app1Inst)
     app1:
    image: app1img
    container_name: app1Inst
    ports:
    - 8300:8200 //application code exposes port 8200 - e.g sends to socket on 8200
    networks:
    - ret-net


    app2:
    image: app2img
    container_name: app2Inst
    ports:
    - 9300:9200
    depends_on:
    - app1
    networks:
    - ret-net
    links:
    - app1

    ///i still need to say here
    / environment : -
    / - host=app1Inst
    / - port=8200 --what do i gain using links?

    networks:
    ret-net:

    最佳答案

    您无需在现代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

    关于docker - 当我仍然需要对地址进行硬编码时,为什么要使用docker链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53769429/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com