我正在我的AWS EC2实例上工作,现在对我的应用程序进行泊坞处理以使其准备好进行生产。我有一个用于后端和React前端的Django API。目的是使用gunicorn作为后端服务api和nginx服务React静态文件。我有2个docker文件,一个用于后端,一个用于前端。后端正在与docker中的gunicorn配合使用,并与docker-compose配合使用。

我一直在努力与前端。 docker 本身将以npm start(而不是nginx)运行,但是拒绝与docker-compose一起使用,您能否根据以下我需要更正的代码提出建议? (因为我也在写这篇文章,所以我发现 docker 自己为前端合谋并没有最终启动)

之后,我将尝试使其再次与nginx一起使用,因此不会在产品中使用npm start。

此外,我想知道如何共享gunicorn创建的.sock文件,以便能够被2个单独的docker中的nginx使用。如果这不是连接前端和后端的正确方法,请提供最好的方法,因为它会受到高度赞赏。

我努力了:
-各种附加组件和对docker组成的更改,包括在前端服务中添加一个depends_on以依赖于后端。
-具有相同网络和数量的不同解决方案的组合,并且认为它仍然没有任何帮助。

在终端输出:

(project) ubuntu@XXXXXXXXXXX:~/django-react-app$ docker-compose up
Starting django-react-app_frontend_1 ... done
Starting django-react-app_backend_1  ... done
Attaching to django-react-app_frontend_1, django-react-app_backend_1
backend_1   | [2019-06-08 16:04:51 +0000] [1] [INFO] Starting gunicorn 19.9.0
backend_1   | [2019-06-08 16:04:51 +0000] [1] [INFO] Listening at: http://0.0.0.                               0:8000 (1)
backend_1   | [2019-06-08 16:04:51 +0000] [1] [INFO] Using worker: sync
backend_1   | [2019-06-08 16:04:51 +0000] [8] [INFO] Booting worker with pid: 8
backend_1   | /usr/local/lib/python3.7/site-packages/psycopg2/__init__.py:144: U                               serWarning: The psycopg2 wheel package will be renamed from release 2.8; in orde                               r to keep installing from binary please use "pip install psycopg2-binary" instea                               d. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-f                               rom-pypi>.
backend_1   |   """)


docker-compose.yml文件
version: "3"
services:

  frontend:
    build:
      context: .
      dockerfile: frontend_docker
    ports:
      - "3000:3000"
    volumes:
      - codevolume:/code
    networks:
      - backend

  backend:
    build:
      context: .
      dockerfile: backend_docker
    ports:
      - "8000:8000"
    volumes:
      - codevolume:/code
    networks:
      - backend

volumes:
  codevolume:
# Networks to be created to facilitate communication between containers
networks:
  backend:


frontend_dockerfile
FROM node:11.15

USER root

SHELL ["/bin/bash", "-c"]

RUN apt-get update -y && \
 apt-get install -y nginx && \
 apt-get clean && \
 mkdir /code/ && \
 rm -rf /tmp/*

WORKDIR /code

COPY source/frontend/ /code/

RUN npm install && \
 npm cache clear --force && \
 rm -rf /tmp/*

RUN npm run-script build && \
 rm -rf /tmp/*

#will only be using one of these with nginx and removing the other once i resolve this stackoverflow issue :)
EXPOSE 8000
EXPOSE 3000

COPY configs/nginx.conf /tmp/

RUN mv /tmp/nginx.conf /etc/nginx/sites-available/myreactfrontend && \
 ln -s /etc/nginx/sites-available/myreactfrontend /etc/nginx/sites-enabled

#will ideally be switching to nginx afterward, may even look into multi stage builds if people think this would be recommended
#ENTRYPOINT ["/bin/bash", "-c", "nginx -g 'daemon off;'"]
ENTRYPOINT ["/bin/bash", "-c", "npm start"]

下面的文件工作正常,因此不需要编辑,我正在提供文件,以便在上下文中有意义。

backend_docker
FROM python:3

USER root

SHELL ["/bin/bash", "-c"]

RUN mkdir /code

WORKDIR /code

COPY requirements/base.txt /code/

COPY source/backend/ /code/

ENV PYTHONUNBUFFERED 1

ENV DJANGO_SETTINGS_MODULE=mydjangoapi.settings.base

RUN pip install -r base.txt && \
 python manage.py makemigrations && \
 python manage.py migrate

EXPOSE 8000

ENTRYPOINT ["/bin/bash", "-c", "gunicorn --bind 0.0.0.0:8000 mydjangoapi.wsgi"]

最佳答案

简而言之,由于OP通过docker-compose build文件内部的dockerfile构建容器,而不仅仅是通过docker-compose.yml“打开图像”,因此此修复程序正在运行docker-compose

关于node.js - 在此示例中,如何使用docker-compose允许2个容器正确共享.sock文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56509195/

10-10 00:39
查看更多