docker - Docker-Compose Up可以运行,但是Eb Local Run不能运行

标签 docker amazon-elastic-beanstalk docker-compose dockerfile

附件是我的docker-compose文件。它是一个非常简单的项目,具有数据库和phpmyadmin来访问它。

web:
    build: ./docker_web/
    links:
        - db
    ports: 
        - "80:80"
    volumes: 
        - "./docker_web/www/:/var/www/site"
db:
    image: mysql:latest
    restart: always
    volumes:
      - "./.data/db:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: ^^^^
      MYSQL_DATABASE: electionbattle
      MYSQL_USER: admin
      MYSQL_PASSWORD: ^^^^
phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    environment:
     - PMA_ARBITRARY=1
    restart: always
    ports:
     - 8081:80
    volumes:
     - /sessions
    links:
        - db

如果我运行它,它工作正常。我为Amazon Docker Run for Elastic Beanstalk创建了等价物,它启动了,但是由于某种原因,它无法在.data文件夹中找到用于保存我的持久数据库数据的卷。

我尝试将.data更改为没有数据的运气。

当我尝试做eb deploy时,我也收到一个奇怪的错误
2016-09-24 19:56:10 UTC-0700    ERROR   ECS task stopped due to: Essential container in task exited. (db: CannotCreateContainerError: API error (500): create ./.data/db/: "./.data/db/" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed web: phpmyadmin: )

我不知道如何解决此错误或为什么会发生。有任何想法吗?

糟糕,忘记添加我的亚马逊文件了:)。
{
  "AWSEBDockerrunVersion": 2,
  "volumes": [
    {
      "name": "web",
      "host": {
        "sourcePath": "./docker_web/www/"
      }
    },
    {
      "name": "db",
      "host": {
        "sourcePath": "./data/db/"
      }
    }
  ],
  "containerDefinitions": [
    {
      "name": "web",
      "image": "197984628663.dkr.ecr.us-west-1.amazonaws.com/electionbattleonline",
      "memory": 200,
      "essential": true,
      "mountPoints": [
        {
          "sourceVolume": "web",
          "containerPath": "/var/www/site",
          "readOnly": false
        }
      ],
      "links": [
        "db"
      ],
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80
        }
      ]
    },
    {
      "name": "db",
      "image": "mysql:latest",
      "environment": [
        {
          "name": "MYSQL_ROOT_PASSWORD",
          "value": "^^^^"
        },
        {
          "name": "MYSQL_DATABASE",
          "value": "electionbattleonline"
        },
        {
          "name": "MYSQL_USER",
          "value": "admin"
        },
        {
          "name": "MYSQL_PASSWORD",
          "value": "^^^^"
        }
      ],
      "portMappings": [
      {
        "hostPort": 3306,
        "containerPort": 3306
      }
      ],
      "mountPoints": [
        {
          "sourceVolume": "db",
          "containerPath": "/var/lib/mysql",
          "readOnly": false
        }
      ],
      "essential": true,
      "memory": 200
    },
    {
      "name": "phpmyadmin",
      "image": "phpmyadmin/phpmyadmin",
      "environment": [
        {
          "name": "PMA_ARBITRARY",
          "value": "1"
        }
      ],
      "essential": true,
      "memory": 128,
      "links": [
        "db"
      ],
      "portMappings": [
        {
          "hostPort": 8081,
          "containerPort": 80
        }
      ]
    }
  ]
}

最佳答案

不要使用相对路径。

在部署之前使用 eb本地运行进行测试,它将帮助您解决部署问题。您的Dockerrun.aws.json文件将被转换为docker-compose.yml文件,并开始使用docker的本地副本。

您可以在项目目录中的路径.elasticbeanstalk / docker-compose.yml中找到生成的docker-compose.yml。您会注意到docker-compose配置文件中缺少卷。

要解决此问题,请将您的音量更改为:

"volumes": [
  {
    "name": "web",
    "host": {
      "sourcePath": "/var/app/current/docker_web/www/"
    }
  },
  {
    "name": "db",
    "host": {
      "sourcePath": "/var/app/current/data/db/"
    }
  }
],

并在您的应用中创建目录,然后“eb local run”将正确转换它们。

eb deploy现在应该可以正常工作了。

关于docker - Docker-Compose Up可以运行,但是Eb Local Run不能运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39685162/

相关文章:

docker - 在Docker中使用包含 “,”的shell命令

Docker-compose 卷 : persistant, 但在哪里?

docker - 使用 Docker Compose 的 flask 和前端

mongodb - 如何使用默认集合和数据创建 Mongo Docker 镜像?

amazon-web-services - elasticbeanstalk 无法部署工作环境/var/pids/web.pid : no such file or directory

amazon-web-services - AWS : The following resource(s) failed to create: [AWSEBAutoScalingGroup]

amazon-web-services - 用于构建 Java 应用程序、Docker 镜像并将其推送到 AWS ECR 的 Bitbucket 管道?

macos - 从网络中的外部机器访问 Docker

amazon-web-services - 使用 Jenkins 和 Opswork 集成的持续部署

amazon-web-services - Amazon ECS错误:无法创建没有容器的任务定义