docker:无法将两个容器端口映射到一个主机端口

时间:2016-10-20 15:55:28

标签: python docker flask dockerfile pm2

pm2的app.json(src / app.py是Flask app):

{
    "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.

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:4)

你不能在主机的一个端口上监听两件事 - 无论它们是一个容器中的独立端口,还是两个Docker容器,还是两个其他应用程序。这不是Docker的限制,它是OS网络堆栈的一部分。

如果您可以在这种情况下执行此操作,主机会向端口8080发送请求?要在容器或端口8081中端口8080,还是将它组播到两者?