web-dev-qa-db-fra.com

Comment traduire docker-compose.yml en Dockerrun.aws.json pour Django

Je suis les instructions à https://docs.docker.com/compose/Django/ pour obtenir une application dockerized de base Django app va. Je peux exécuter localement sans problème mais j'ai du mal à le déployer sur AWS en utilisant Elastic Beanstalk. Après avoir lu ici , j'ai pensé que je devais traduire docker-compose.yml en Dockerrun.aws.json pour cela travailler.

Le docker-compose.yml d'origine est

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

et voici ce que j'ai traduit jusqu'à présent

{
  "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"
    }
  ]
}

mais ça ne marche pas. Qu'est-ce que je fais mal?

20
user3667089

J'avais du mal à obtenir les tenants et aboutissants du format Dockerrun. Découvrez Transformation de conteneur : "Transforme les configurations docker-compose, ECS et Marathon" ... c'est un bouée de sauvetage. Voici ce qu'il génère pour votre exemple:

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

Autrement dit, dans ce nouveau format, vous devez lui indiquer la quantité de mémoire à allouer à chaque conteneur. De plus, vous devez fournir une image - il n'y a pas d'option à construire. Comme mentionné dans les commentaires, vous voulez construire et pousser vers DockerHub ou ECR, puis lui donner cet emplacement: par exemple [org name]/[repo]:latest sur Dockerhub, ou l'URL pour ECR. Mais container-transform fait le mountPoints et volumes pour vous - c'est incroyable.

16
Sam H.

Vous avez quelques problèmes.

1) "web" ne semble pas être une "image", vous le définissez comme "build". 'dans votre docker-compose .. Rappelez-vous, le Dockerrun.aws.json devra extraire l'image de quelque part (le plus simple est d'utiliser les dépôts ECS)

2) Je pense que "commande" est un tableau. Vous auriez donc:

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

3) vos mountPoints sont corrects, mais la définition du volume en haut est incorrecte. {"name": "web", "Host": {"sourcePath": "/ var/app/current/db"} Je ne suis pas sûr à 100%, mais le chemin fonctionne pour moi. si vous avez le fichier Dockerrun.aws.json, à côté se trouve un répertoire appelé/db .. alors ce sera l'emplacement de montage.

2
alphaadidas