【问题标题】:Send request from one docker container to another将请求从一个 docker 容器发送到另一个
【发布时间】:2015-02-17 20:57:21
【问题描述】:

我正在尝试将一些现有服务器移动到 docker 容器中。我有两个:一个应用服务器和一个 api 服务器,但使用 node.js 开发。我让它们都在 ubuntu vm 中工作,并且可以从 vm 外部访问这两个应用程序,这很棒。

每台服务器都有自己的域。应用服务器使用 app 域,而 api 服务器使用 api 域,我知道很聪明。在本地,我将两个域都添加到了我的 hosts 文件中,以指向分配给 ubuntu vm 的 ip。

我遇到的唯一问题是从应用服务器发送的请求需要路由到 api 服务器。尝试编辑应用服务器容器(通过 Dockerfile)和 ubuntu vm 的主机文件,但请求失败。

有没有一种简单的方法可以让该请求不出去并尝试解析 api 域但让它指向 api 容器?

【问题讨论】:

    标签: node.js ubuntu docker


    【解决方案1】:

    一个典型的解决方案是使用 Docker 的 --link 选项来链接容器。也就是说,如果你这样做:

    docker run -d --name api myapi
    docker run -d --name app --link api:api myapp
    

    然后在app 容器内,主机名api 将映射到api 容器。您还将有一组可用的环境变量来描述链接容器上的公开端口。例如,如果您的“api”容器暴露了 80 端口,则变量将如下所示:

    API_PORT_80_TCP=tcp://172.17.0.10:80
    API_PORT_80_TCP_PORT=80
    API_PORT_80_TCP_PROTO=tcp
    API_PORT=tcp://172.17.0.10:80
    API_NAME=/app/api
    API_PORT_80_TCP_ADDR=172.17.0.10
    

    链接选项有一些缺点:

    • 这仅适用于托管在同一物理主机上的容器
    • 如果重启“api”容器,也必须重启“app”容器。

    如果您在多主机环境中运行,那么您选择的编排工具可能会解决这两个特定问题。

    【讨论】:

    • 环境变量不再是连接到链接服务的推荐方法。
    • (仅当您使用旧版 1 Compose 文件格式时才会填充环境变量) 而是使用链接名称(默认情况下,链接的名称service) 作为要连接的主机名。 docs.docker.com/compose/link-env-deprecated
    • --link 是一项旧功能。您应该始终更喜欢使用 Docker 网络驱动程序而不是链接。
    • 好吧,现在是:)
    【解决方案2】:

    链接功能(--link)是一项旧功能。

    您应该始终更喜欢使用 Docker 网络驱动程序而不是链接。

    示例:运行 Redis 容器并将 Redis 绑定到 localhost,然后运行 ​​redis-cli 命令并通过 localhost 接口连接到 Redis 服务器。

    $ docker run -d --name redis example/redis --bind 127.0.0.1
    $ # use the redis container's network stack to access localhost
    $ docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1
    

    有关详细信息,请参阅文档。

    https://docs.docker.com/compose/link-env-deprecated/

    https://docs.docker.com/engine/reference/run/#network-settings

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      相关资源
      最近更新 更多