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