如何将docker-compose.yml转换为Django的Dockerrun.aws.json

我正在按照https://docs.docker.com/compose/django/上的说明得到一个基本的dockerized django应用程序。 我能够在没有问题的情况下在本地运行它,但是使用Elastic Beanstalk将其部署到AWS时遇到了麻烦。 在阅读这里之后 ,我想我需要将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和Marathonconfiguration”…这是一个救命稻草。 这是你输出的例子:

 { "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". 

也就是说,在这种新的格式中,你必须告诉它分配给每个容器多less内存。 此外,你需要提供一个图像 – 没有selectbuild立。 正如在注释中提到的那样,您想要构build并推送到DockerHub或ECR,然后将其提供给该位置:例如[org name]/[repo]:latest的Dockerhub或ECR的URL。 但container-transform为你做mountPointsvolumes – 这是惊人的。

你有几个问题。

1)“networking”似乎不是一个“形象”,你把它定义为“构build”。 '在你的docker-compose中。记住,Dockerrun.aws.json将不得不从某处拉取图片(最简单的就是使用ECS的Repositories)

2)我认为“命令”是一个数组。 所以你会有:

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

3)你的mountPoints是正确的,但在顶部的音量定义是错误的。 {“name”:“web”,“host”:{“sourcePath”:“/ var / app / current / db”}我不是100%肯定的,但是path适用于我。 如果您有Dockerrun.aws.json文件,则旁边是一个名为/ db的目录,那么这将是安装位置。