当前位置: 首页 > 知识库问答 >
问题:

Docker撰写:将容器端口重新映射为网络内部和主机上相同的端口

龚运乾
2023-03-14

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

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

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

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

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

问题:有没有办法在compose文件中重新映射端口,使端口在docker网络内外保持一致?例如,如果我能在docker网络中使用8081端口参考app-2,那就太好了。

我将不胜感激任何提示。

共有1个答案

濮阳安澜
2023-03-14

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

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

使用docker cp

使用docker commit

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

 类似资料:
  • 我有一个问题,或者最好说有两个问题。两者都依赖于Docker,并且与Docker如何处理容器主机名和端口的理解有关。 假设我有两个服务在不同的docker容器中运行,并将容器中的端口80公开到端口8081(service1)和端口8082(service2): 服务1: 8081: 80服务2: 8082: 80 现在我很清楚,从主机的角度来看,我可以通过使用公开的端口(http://localh

  • 问题内容: 我想在不同主机上的某些Docker容器中运行任务。而且我编写了一个管理器应用程序来管理容器(启动任务,停止任务,获取状态等)。容器启动后,它将向管理器发送一个http请求及其地址和端口,因此管理器将知道如何管理该容器。 由于同一主机上可能运行着多个容器,因此它们将被映射到不同的端口。要在我的经理上注册一个容器,我必须知道每个容器映射到哪个端口。 如何 在 Docker容器中获取映射的端

  • 我有一个基本的docker compose设置,包括以下内容: docker网桥子网从192.168.50.0/24开始 4项服务:兔子、spring配置、票价、入住 每个服务都正确设置了主机名,并且能够在子网(192.168.50.0)中找到彼此。IP动态地归属于这个子网,它们都从各自容器中的8080端口开始 从主机上可以看到网桥网络,并且可以使用其ip访问容器的每个实例 如果不将8080以外的

  • 当我在一台docker主机上为同一个web映像启动两个docker容器时。 两个docker容器在同一端口监听 两个集装箱的端口映射到docker主机的不同端口:, 要从docker主机外部访问两个容器,需要通过访问docker主机ip和端口或 是否有一种解决方案可以通过ip和端口从docker主机外部访问docker容器,,而无需端口映射? 不同dock主机上的所有docker容器都可以直接相互

  • 问题内容: 主机可以打开Docker容器访问端口吗?具体来说,我在主机上运行了MongoDB和RabbitMQ,我想在Docker容器中运行一个进程以侦听队列并(可选)写入数据库。 我知道我可以将端口从容器转发到主机(通过- p选项),并可以从Docker容器中连接到外部环境(即Internet),但我不想公开RabbitMQ和MongoDB端口从主持人到外界 编辑:一些澄清: 我必须执行此技巧才

  • 我遵循的https://app.pluralsight.com/library/courses/docker-web-development/table-of-contents使用旧的微软/aspnetcore-构建镜像,但我运行核心2.1,所以我使用微软/dotnet: 2.1-sdk代替。 我正在运行的命令是: docker run-it-p8080:5001-v${pwd}:/app-w“/