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"
}
]
}
しかし、それは機能していません。何が悪いのですか?
私は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-transform
がmountPoints
とvolumes
を代行します-すばらしいです。
いくつか問題があります。
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と呼ばれるディレクトリです。それがマウント場所になります。