【发布时间】: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:6000或mylinodeip: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