首页 > 解决方案 > Docker 多个端口(前端和后端)不起作用

问题描述

我对 Docker 和 CI 很陌生,所以请不要烧烤我 :)

我在 Linode 上,我想在同一台服务器上运行前端(反应)和后端(python)。两者都将在不同的端口上,除非您告诉我这是错误的方法。

现在,我在端口上运行 Jenkins8081并有两个单独的工作:

后端詹金斯:

IMAGE = "my_docker_flask:latest"
image = docker.build("${IMAGE}");
def container = image.run('-p 5000:5000')
def contport = container.port(5000)

后端 Dockerfile(烧瓶):

FROM python:2.7
WORKDIR app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python"]
CMD ["app.py"]

前端詹金斯:

IMAGE = "reactapp"
image = docker.build("${IMAGE}")
def container = image.run('-p 6000:6000')
def contport = container.port(6000)

前端 Dockerfile:

FROM nginx
COPY build /var/www

当我用端口打开我的 Linode 的 IP5000但它6000不起作用时,后端工作正常。我什至尝试过,3333但这也不起作用。

这是我的docker ps -a

reactapp  "nginx -g 'daemon of…"   41 seconds ago      Up 40 seconds       80/tcp, 0.0.0.0:6000->6000/tcp
reactapp  "nginx -g 'daemon of…"   2 days ago          Up 2 days           80/tcp, 0.0.0.0:3333->3333/tcp
my_docker_flask:latest   "python app.py"   2 days ago          Up 2 days           0.0.0.0:5000->5000/tcp

可以请人帮助我吗?

如何使用相同的 IP 在不同的端口上运行多个应用程序?

编辑

我已修复它,但更改为以下内容:

COPY build /usr/share/nginx/html

def container = image.run('-p 5000:80')

标签: dockernginxjenkinsdockerfile

解决方案


80/tcp, 0.0.0.0:6000->6000/tcp

仔细看,我们可以知道您的reactapp服务正在80集装箱内的港口提供服务。但是您正在尝试将6000容器中的端口映射到6000外部端口。当然,您将无法访问根本不提供服务的服务。

另外,背后的原因This site can’t be reached - ERR_UNSAFE_PORT是因为您使用的6000是受 Chrome 浏览器限制的端口。

解决方案:

  • 仅映射端口 80,而不是任何其他端口,因为它正在提供服务。
  • 停止使用端口 80 的所有其他服务
  • 只有一个reactapp服务实例,因为我们不希望另一个实例阻塞端口。

推荐阅读