首页 > 解决方案 > Docker Compose:将容器端口重新映射为网络内部和主机上的相同

问题描述

我有两个 dockerized 应用程序,它们是 docker 网络的一部分,它们都在 8080 端口上启动。我需要将它们都暴露在主机上,这就是为什么我将它们相应地暴露给 8080 和 8081。

app-1:
  ports:
    - "8080:8080"

app-2:
  ports:
    - "8081:8080"

我无法控制这些应用程序(我无法更改它们的端口),它们只是端到端测试套件的一部分,需要运行才能执行测试。

问题:根据我是在 docker 容器(同一个 docker-compose 文件中的 3d 应用程序)还是在本地执行测试,我必须使用不同的端口(8080 或 8081),因为请求要么在 docker 网络内要么通过主机。这很不方便。

问题:有没有办法在 compose 文件中重新映射端口,使端口在 docker 网络内部和外部相同?例如,如果我可以参考在 docker 网络中使用 8081 端口,那就太好app-2

我会很感激任何提示。

标签: dockernetworkingdocker-composedocker-networkingdocker-network

解决方案


我遇到了类似的问题,我使用以下方法解决了它。这是一个 NodeJS-express 应用程序。

  1. 我在定义的端口上运行了一个容器并与容器的 CLI 连接。找到定义端口的环境文件。
  2. 将该文件复制docker cp到我的本地计算机上。
  3. 修改了文件并更新了端口。
  4. 停止容器。
  5. 再次用更新后的文件替换了容器内的环境文件

使用docker cp

使用该容器作为图像提交docker commit

在更新的端口上运行容器并使用新提交的映像。


推荐阅读