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