Docker-Compose Up 有效,但 Eb Local Run 无效

Posted

技术标签:

【中文标题】Docker-Compose Up 有效,但 Eb Local Run 无效【英文标题】:Docker-Compose Up Works but Eb Local Run does not 【发布时间】:2017-02-02 18:05:34 【问题描述】:

附件是我的 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

如果我运行它,它工作正常。我为 Elastic Beanstalk 的 Amazon Docker Run 创建了等效项,它启动了,但由于某种原因,它在 .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
        
      ]
    
  ]

【问题讨论】:

这是上面的整个撰写文件吗?你不是在用version: "2" 吗? 是的,它是整个文件,docker-compose,它的对应部分是 Dockerrun.aws.json 有趣的是,我摆脱了 db 容器,当我尝试部署时,它现在对 web 容器给出了相同的错误?多么奇怪……它不喜欢安装卷吗? 我建议你使用当前版本的 docker,它的 docker-compose 格式。非版本 2 现在已经过时了。请参阅此docs.docker.com/compose。你不再需要links:。同时发布您的docker info 'docker version 你能详细说明非版本2吗?这是否与亚马逊的 docker run 有关? 【参考方案1】:

不要使用相对路径。

在部署前使用eb local run进行测试,它将帮助您解决部署问题。您的 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-Compose Up 有效,但 Eb Local Run 无效的主要内容,如果未能解决你的问题,请参考以下文章

如何在系统启动时运行 docker-compose up -d?

docker-compose up与docker-compose up -d

Docker-compose up时报错:

使用“eb local run”运行应用程序有效,但实际上无法连接到应用程序

对于nginx容器,docker-compose up失败

docker-compose up 容器开始排序