如何在Dockerrun.aws.json中的Django服务production.yml中运行命令/ start?

问题描述

我正在尝试在AWS Elastic Beanstalk中部署该项目(https://github.com/pydanny/cookiecutter-django)的Docker设置。我正在尝试将命令/ start转换为Dockerrun.aws.json,但由于该任务无法在ECS容器内正常运行,因此我不确定这是否是正确的转换。我用自定义Nginx Dockerfile替换了traefik,当我使用production.yml文件在本地使用docker-compose运行它时,它们可以正常工作(我可以访问Django的管理站点),但是当我开始在Elastic Beanstalk中部署它们时, django任务停止,Nginx正常运行。该项目还配置了白噪声和压缩器。构建后,我还使用AWS ECR上传图像。我怀疑可能是导致问题的/ start命令,但我不确定。如果有人可以帮助我,我将不胜感激。

请参考以下配置文件

请注意,我删除了一些配置,例如环境变量和postgres服务。环境变量放置在Elastic Beanstalk应用程序中,对于postgres,我正在使用AWS中的RDS数据库。 Django的Dockerfile也未更改,它来自项目的生成的Dockerfile。

production.yml

version: "3"

services:
  django: &django
    build:
      context: .
      dockerfile: ./compose/production/django/Dockerfile
    image: <id>.dkr.ecr.ap-southeast-1.amazonaws.com/django-docker
    command: /start

  Nginx:
    build: ./compose/production/Nginx/
    image: <id>.dkr.ecr.ap-southeast-1.amazonaws.com/django-docker-Nginx
    depends_on:
      - django
    ports:
      - 80:80

开始文件

#!/bin/bash

set -o errexit
set -o pipefail
set -o nounset


python /app/manage.py collectstatic --noinput

compress_enabled() {
python << END
import sys

from environ import Env

env = Env(COMPRESS_ENABLED=(bool,True))
if env('COMPRESS_ENABLED'):
    sys.exit(0)
else:
    sys.exit(1)

END
}

if compress_enabled; then
  # NOTE this command will fail if django-compressor is disabled
  python /app/manage.py compress
fi

/usr/local/bin/gunicorn config.wsgi --bind 0.0.0.0:5000 --chdir=/app

Nginx配置

proxy_cache_path /var/cache/Nginx levels=1:2 keys_zone=STATIC:10m inactive=7d use_temp_path=off;

upstream django {
  server django:5000;
}

server {
  listen 80 default_server;

  server_name _;

  server_tokens off;

  gzip on;
  gzip_proxied any;
  gzip_comp_level 4;
  gzip_types text/css application/javascript image/svg+xml;

  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection 'upgrade';
  proxy_set_header Host $host;
  proxy_cache_bypass $http_upgrade;

  location /static {
    proxy_cache STATIC;
    proxy_ignore_headers Cache-Control;
    proxy_cache_valid 60m;
    proxy_pass http://django;
  }

  location / {
    proxy_pass http://django;
  }
}

Dockerrun.aws.json

{
    "AWSEBDockerrunVersion": 2,"containerDeFinitions": [
        {
            "command": [
                "/start"
            ],"image": "<id>.dkr.ecr.ap-southeast-1.amazonaws.com/django-docker","name": "django","hostname": "django","memory": 256,"essential": false
        },{
            "image": "<id>.dkr.ecr.ap-southeast-1.amazonaws.com/django-docker-Nginx","name": "Nginx","dependsOn": [
                {
                    "condition": "START","containerName": "django"
                }
            ],"portMappings": [
                {
                    "containerPort": 80,"hostPort": 80
                }
            ],"essential": true,"links": [
                "django"
            ],"memory": 128
        }
    ]
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)