如何将 Docker 容器中的外部 link 重定向到本地服务

How to redirect external link in a Docker container to local service

我的 Docker 旅程还处于早期阶段,我正在尝试 'Dockerise' 一个现有的 UI/API/DB 网络应用程序,其中 UI & API/DB 在两个不同的服务器上。到目前为止一切顺利,我的 docker-compose 为 UI、API 和 DB(以及 phpMyAdmin)启动服务就好了。我知道由于 Docker.

的默认网络方法,这些服务可以使用服务名称作为主机名固有地进行通信

UI(一个 Angular 代码库)对 https://api.myproject.com 进行各种调用,这在实时站点中运行良好,但在我的 Docker 版本中并不理想,因为我希望它到达我在容器中的 API 服务,而不是 API 实时站点。

我知道我可以编辑 UI 容器上的代码,并将对 https://api.myproject.com 的调用替换为对 'api' 的调用,但是如果我想重新部署在将来会使用不同的服务器(就像现在一样)。

容器是否可以将 URL 的所有 POST/GET 等重定向到容器服务?我认为 --add-host 可能会做这样的事情,但它似乎需要一个 IP 地址而不是服务名称。

提前致谢。

编辑[澄清] 我的问题在于用户在浏览器中看到的 UI 页面 (HTML/JS)。加载页面时,它会向 API URL 抛出一些 GET 请求,这就是我希望重定向到容器 API 服务的内容。

您可以为给定的容器使用网络别名,这些别名可以覆盖现有的 fqdn。

这是一个 200 万制作的示例:

docker-compose.yml

---
services:
  search_engine:
    image: nginx:latest
    networks:
      default:
        aliases:
          - google.com
          - www.google.com

  client:
    image: alpine:latest
    command: tail -f /dev/null

您可以通过以下方式启动此项目:

docker-compose up -d

然后使用

登录客户端容器
docker-compose exec client sh

并尝试使用以下任一方式访问您的 search_engine 服务

wget http://search_engine
wget http://google.com
wget http://www.google.com

在所有情况下,您将获得全新安装的 nginx 服务器的默认 index.html 页面。