web-dev-qa-db-ja.com

Djangoの場合、docker-compose.ymlをDockerrun.aws.jsonに変換する方法

https://docs.docker.com/compose/Django/ の手順に従って、基本的なdockerized Djangoアプリを実行します。実行できます問題なくローカルでそれを実行していますが、Elastic Beanstalkを使用してAWSにデプロイするのに問題があります here を読んだ後、docker-compose.ymlをDockerrun.aws.jsonに変換する必要があると考えました仕事に。

オリジナルのdocker-compose.ymlは

version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

これが私がこれまでに翻訳したものです

{
  "AWSEBDockerrunVersion": 2,
  "volumes": [
    {
      "name": "db"
    },
    {
      "name": "web"
    }
  ],
  "containerDefinitions": [
    {
      "name": "db",
      "image": "postgres",
      "essential": true,
      "memory": 256,
      "mountPoints": [
        {
          "sourceVolume": "db"
          "containerPath": "/var/app/current/db"
        }
      ]
    },
    {
      "name": "web",
      "image": "web",
      "essential": true,
      "memory": 256,
      "mountPoints": [
        {
          "sourceVolume": "web"
          "containerPath": "/var/app/current/web"
        }
      ],
      "portMappings": [
       {
         "hostPort": 8000,
         "containerPort": 8000
       }
     ],
     "links": [
        "db"
      ],
      "command": "python manage.py runserver 0.0.0.0:8000"
    }
  ]
}

しかし、それは機能していません。何が悪いのですか?

20
user3667089

私はDockerrun形式のインとアウトを取得するのに苦労していました。チェックアウト Container Transform :「Docker-compose、ECS、およびMarathon構成を変換する」...これは命の恩人です。これはあなたの例のためにそれが出力するものです:

{
    "containerDefinitions": [
        {
            "essential": true,
            "image": "postgres",
            "name": "db"
        },
        {
            "command": [
                "python",
                "manage.py",
                "runserver",
                "0.0.0.0:8000"
            ],
            "essential": true,
            "mountPoints": [
                {
                    "containerPath": "/code",
                    "sourceVolume": "_"
                }
            ],
            "name": "web",
            "portMappings": [
                {
                    "containerPort": 8000,
                    "hostPort": 8000
                }
            ]
        }
    ],
    "family": "",
    "volumes": [
        {
            "Host": {
                "sourcePath": "."
            },
            "name": "_"
        }
    ]
}
Container web is missing required parameter "image".
Container web is missing required parameter "memory".
Container db is missing required parameter "memory".

つまり、この新しい形式では、各コンテナに割り当てるメモリ量を指定する必要があります。また、イメージを提供する必要があります-ビルドするオプションはありません。コメントで述べられているように、DockerHubまたはECRにビルドしてプッシュし、その場所を指定します。例:[org name]/[repo]:latest Dockerhub、またはECRのURL。だが container-transformmountPointsvolumesを代行します-すばらしいです。

16
Sam H.

いくつか問題があります。

1)「ウェブ」は「イメージ」ではないように見えます。「ビルド」として定義します。 'docker-compose .. Dockerrun.aws.jsonはどこかからイメージをプルする必要があります(最も簡単なのはECSのリポジトリを使用することです)。

2)「コマンド」は配列だと思います。だからあなたは持っているでしょう:

"command": ["python" "manage.py" "runserver" "0.0.0.0:8000"]

3)mountPointsは正しいが、上部のボリューム定義が間違っている。 {"name": "web"、 "Host":{"sourcePath": "/ var/app/current/db"}完全に定かではありませんが、パスは機能します。 Dockerrun.aws.jsonファイルがある場合、その隣は/ dbと呼ばれるディレクトリです。それがマウント場所になります。

2
alphaadidas