【问题标题】:docker: cannot map two container ports to one host portdocker:无法将两个容器端口映射到一个主机端口
【发布时间】:2016-10-21 21:47:29
【问题描述】:

pm2 的 app.json(src/app.py 是 Fl​​ask 应用):

{
    "apps": [
    {
      "exec_mode": "fork",
      "script": "src/app.py",
      "args": ["-p", "8080"]
    },
    {
      "exec_mode": "fork",
      "script": "src/app.py",
      "args": ["-p", "8081"]
    }
  ]
}
~        

Dockerfile:

EXPOSE 8080 8081
CMD ["pm2", "start", "app.json"]

运行docker时出错:

docker run -p 8080:8080 -p 8080:8081 oct20
docker: Error response from daemon: driver failed programming external connectivity on endpoint high_fermi (xxxxxxxxxxx): Bind for 0.0.0.0:8080 failed: port is already allocated.

有什么想法吗?谢谢

【问题讨论】:

  • 是的,你不能分配一个端口两次
  • @user2915097 如何将两个容器端口映射到一个主机端口?有可能吗?
  • 您可能想看看 HAProxy 或其他一些负载平衡解决方案。

标签: python docker flask dockerfile pm2


【解决方案1】:

您不能在主机的一个端口上监听两个东西 - 无论它们是一个容器中的单独端口,还是两个 Docker 容器,或两个其他应用程序。这不是 Docker 的限制,它是操作系统网络堆栈的一部分。

如果在这种情况下您可以这样做,主机会在哪里向端口 8080 发送请求?到容器中的 8080 端口,或 8081 端口,或将其多播到两者?

【讨论】:

  • 我想将流量拆分到两个应用程序(8080、8081)。也许负载平衡器可以帮助我。
  • 是的,我会查看三个容器 - 每个应用一个容器,and use Nginx as a load balancer。外部流量进入 Nginx,应用容器不需要暴露任何端口——Nginx 容器可以访问同一个 Docker 网络上的容器端口。
猜你喜欢
  • 2014-09-01
  • 2016-10-08
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多