我在docker项目中使用docker-compose获得了一个Symfony2应用程序。
尝试对我的数据库运行架构更新时出现以下错误。
[Doctrine\DBAL\Exception\DriverException]
An exception occured in driver: SQLSTATE[HY000] [1130] Host '172.17.0.129' is not allowed to connect to this MySQL server
我的docker-compose.yml文件:
api:
build: images/nginx
ports:
- "80:80"
- "9000:9000"
links:
- mysql:mysql
- memcached:memcached
- redis:redis
- elasticsearch:elasticsearch
- rabbitmq:rabbitmq
volumes:
- www/api:/var/www
- sites/api:/etc/nginx/sites-enabled
socketserver:
build: images/socketserver
links:
- rabbitmq:rabbitmq
ports:
- "5000:5000"
volumes:
- www/socketserver:/var/www
- sites/socketserver:/etc/nginx/sites-enabled
adminpanel:
build: images/adminpanel
ports:
- "8001:8001"
volumes:
- www/adminpanel:/var/www
- sites/adminpanel:/etc/nginx/sites-enabled
mysql:
image: mysql:latest
expose:
- "3306"
ports:
- "3307:3306"
environment:
MYSQL_DATABASE: api
MYSQL_USER: root
MYSQL_PASSWORD: [REDACTED]
MYSQL_ROOT_PASSWORD: [REDACTED]
memcached:
image: tutum/memcached
ports:
- "11211:11211"
dns: 3.3.3.3
environment:
MEMCACHED_PASS: [REDACTED]
redis:
image: tutum/redis
ports:
- "6379:6379"
dns: 4.4.4.4
environment:
REDIS_PASS: [REDACTED]
elasticsearch:
image: tutum/elasticsearch
ports:
- "9200:9200"
dns: 5.5.5.5
environment:
ELASTICSEARCH_USER:[REDACTED]
ELASTICSEARCH_PASS:[REDACTED]
rabbitmq:
image: dockerfile/rabbitmq
dns: 6.6.6.6
ports:
- "5672:5672"
- "15672:15672"
我的Symfony2 parameters.yml:
parameters:
secret: [REDACTED]
locale: en
mailer_transport: smtp
mailer_host: [REDACTED]
mailer_user: test@theladbible.com
mailer_password: [REDACTED]
database_driver: pdo_mysql
database_host: mysql
database_port: 3306
database_name: api
database_user: root
database_password: [REDACTED]
jms_serializer.cache_naming_strategy.class: JMS\Serializer\Naming\IdenticalPropertyNamingStrategy
我尝试过多种不同的方法。我无法通过localhost或127.0.0.1连接。把'mysql'似乎链接到数据库容器正确的数据库地址,但是我仍然得到上面显示的错误。
我是Docker的新手,所以我可能误解了一些基本原则,如果是这样的话就道歉。
我怀疑我需要添加正确的用户权限吗?我无法直接连接数据库容器来执行此操作。
提前致谢!
答案 0 :(得分:4)
通过使用扩展默认mysql docker镜像的https://registry.hub.docker.com/u/drakedroid/mysql-with-data/来解决此问题,但会自动配置所有内容,以便您可以从其他容器访问它。
在parameters.yml中,将主机设置为与mysql docker名称相同的名称。
所以在我的情况下,我的mysql docker-compose config:
mysql:
image: drakedroid/mysql-with-data
expose:
- "3306"
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: api_master
MYSQL_USER: root
MYSQL_PASSWORD: [REDACTED]
MYSQL_ROOT_PASSWORD: [REDACTED]
在我的parameters.yml
中database_host: mysql
这样Docker会自动为您解决所有问题。