【问题标题】:Docker multiple ports (frontend&backend) not workingDocker 多个端口(前端和后端)不起作用
【发布时间】:2020-09-16 21:54:27
【问题描述】:

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

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

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

后端 Jenkins:

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"]

前端 Jenkins:

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

当我使用端口 5000 打开 Linode 的 IP 但 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')

【问题讨论】:

  • 您能否详细说明 does not work 您是否无法路由到 react 应用服务、任何日志以及您可以在此处添加的错误。 build 文件夹是否包含 HTML 文件等静态工件?
  • 当我点击mylinodeip:6000 我在浏览器中得到This site can’t be reached。如何查找或检查服务器上的构建文件夹文件?它应该只是静态文件。但它在本地工作。
  • 我收到了您的问题,如果它适合您,我们会将其作为答案发布。首先,您不能在浏览器上使用mylinodeip 作为主机,因为只有网络中的容器可以通过该主机名访问。我可以看到您将端口暴露在外面,所以请尝试使用localhost:6000 希望它有效:)
  • 我认为这是一个误解,我可以点击并查看我在mylinodeip:5000 上的python 应用程序在网络上的浏览器中运行,但mylinodeip:6000mylinodeip:3333 无法运行,我得到了消息This site can’t be reached - ERR_UNSAFE_PORT与我的本地主机无关
  • 我明白了 :) 80/tcp, 0.0.0.0:6000->6000/tcp 观察这一点,所以基本上你有 Nginx 在端口 80 上为你的应用程序提供服务,但你正在将端口 6000 从容器映射到外部。所以尝试在端口 80 上捕获您的服务并映射相同的端口。

标签: docker nginx jenkins dockerfile


【解决方案1】:
80/tcp, 0.0.0.0:6000->6000/tcp

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

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

解决方案:

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

【讨论】:

    猜你喜欢
    • 2021-06-16
    • 2017-01-24
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 2017-12-08
    • 2021-06-12
    • 2020-05-24
    • 2018-09-21
    相关资源
    最近更新 更多