连接Symfony2应用程序到Docker中的数据库容器的问题

我在Docker项目中使用docker-compose来创build一个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 

我已经尝试了多种不同的方式。 我无法通过本地主机或127.0.0.1连接。 把“MySQL”似乎链接到数据库容器正确的数据库地址,但是我仍然得到上面显示的错误。

我是Docker的新手,所以我可能误解了一些基础知识,如果是这样的话,我很抱歉。

我怀疑我可能需要添加正确的用户权限? 我还没有能够直接连接到数据库容器来做到这一点。

提前致谢!

通过使用https://registry.hub.docker.com/u/drakedroid/mysql-with-data/解决了这个问题,它扩展了默认的mysql docker镜像,但是自动configuration所有的东西,所以你可以从其他容器中访问它。

在您的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会自动为您解决这个问题。