docker - 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
。
我会很感激任何提示。
解决方案
我遇到了类似的问题,我使用以下方法解决了它。这是一个 NodeJS-express 应用程序。
- 我在定义的端口上运行了一个容器并与容器的 CLI 连接。找到定义端口的环境文件。
- 将该文件复制
docker cp
到我的本地计算机上。 - 修改了文件并更新了端口。
- 停止容器。
- 再次用更新后的文件替换了容器内的环境文件
使用docker cp
使用该容器作为图像提交docker commit
在更新的端口上运行容器并使用新提交的映像。
推荐阅读
- javascript - ParcelJS,在捆绑项目中使用 Chrome 控制台?
- javascript - Firebase 限制用户写入权限
- angular - 根据文档 ID 显示来自 Firestore 的数据
- sql - PostgreSQL:根据空值或非空值排除连接的 ID
- excel - Excel:返回第 1 到第 4 最常见价格的公式
- javascript - 声纳扫描仪 - 错误:无法在模块模式下使用 espree 解析器解析文件
- laravel - 在 Laravel 中使用 Tabler
- c# - 仅应用程序洞察日志异常
- java - 使用位图工厂保存图像文件
- apache-spark - 使用字符串表达式列表作为连接条件